<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.mozilla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jbonacci</id>
	<title>MozillaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mozilla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jbonacci"/>
	<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/Special:Contributions/Jbonacci"/>
	<updated>2026-07-18T04:26:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TSVerifierSyncTestEnvironments&amp;diff=1029320</id>
		<title>TestEngineering/Services/TSVerifierSyncTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TSVerifierSyncTestEnvironments&amp;diff=1029320"/>
		<updated>2014-10-29T21:15:53Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* TokenServer+Verifier Stage Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* NOTE: We currently have two Verifier stacks in Stage (and probably Production): &lt;br /&gt;
** The standalone Browser_ID Verifier stack: See that Verifier Stage section below...&lt;br /&gt;
** A Tokenserver+Verifier stack: See the TokenServer Stage section below...&lt;br /&gt;
&lt;br /&gt;
== Tokenserver, Verifier, and Sync Production Environments ==&lt;br /&gt;
* TokenServer: https://token.services.mozilla.com&lt;br /&gt;
* Verifier: https://verifier.accounts.firefox.com&lt;br /&gt;
* Sync 1.5 Nodes (for now in AWS):&lt;br /&gt;
** sync-1-us-east-2.sync.services.mozilla.com&lt;br /&gt;
** sync-2-us-east-2.sync.services.mozilla.com&lt;br /&gt;
*** There are many more than this now...&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production FxA/Sync:&lt;br /&gt;
** Set/Verify the following Firefox configs:&lt;br /&gt;
*** services.sync.clusterURL = (should get automatically set by the TokenServer)&lt;br /&gt;
*** services.sync.tokenServerURI = https://token.services.mozilla.com/1.0/sync/1.5&lt;br /&gt;
*** services.sync.fxaccounts.enabled=true (NEW FOR NIGHTLY FF 29 - SHOULD BE SET BY DEFAULT)&lt;br /&gt;
*** services.sync.log.appender.file.logOnError = Yes&lt;br /&gt;
*** services.sync.log.appender.file.logOnSuccess = Yes&lt;br /&gt;
*** services.sync.log.appender.file.level = Trace&lt;br /&gt;
*** identity.fxaccounts.auth.uri = https://api.accounts.firefox.com/v1&lt;br /&gt;
*** identity.fxaccounts.remote.uri = https://accounts.firefox.com/?service=sync&amp;amp;context=...&lt;br /&gt;
&lt;br /&gt;
== TokenServer+Verifier Stage Environment ==&lt;br /&gt;
* NOTE: In an upcoming deployent, the Verifier functionality will be rolled into the Tokenserver stack of services.&lt;br /&gt;
&lt;br /&gt;
* URLs&lt;br /&gt;
** TokenServer: https://token.stage.mozaws.net&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net&lt;br /&gt;
** IdP: http://mockmyid.s3-website-us-west-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
* Version:&lt;br /&gt;
 TokenServer:&lt;br /&gt;
 rpm -qa | grep -E &#039;token|browser&#039;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** tokenserver app server or Token app server or similar&lt;br /&gt;
*** (1 or more instances behind a CF stack and ELB)&lt;br /&gt;
** tokenserver db (1 large DB instance behind RDS)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/tokenserver&lt;br /&gt;
** /data/fxa-browserid-verifier&lt;br /&gt;
*** esp. /data/fxa-browserid-verifier/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
*** esp. /etc/puppet/yaml/app&lt;br /&gt;
*** fxa.stage.yaml&lt;br /&gt;
*** fxa.yaml&lt;br /&gt;
*** tokenserver.stage.yaml&lt;br /&gt;
*** tokenserver.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** tokenserver app server:&lt;br /&gt;
*** Search for token, circus, nginx, gunicorn, python, hekad, node&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.log.*&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.error.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log		(not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log		(not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.error.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stdout.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stderr.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/puppet/modules/hekad&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** Old Dev IAM&lt;br /&gt;
*** SSH with AWS keys to the Stage bastion host in US-East-1. From there SSH directly into any instance.&lt;br /&gt;
** New Dev IAM&lt;br /&gt;
*** SSH with AWS keys to the Stage bastion host in US-East-1 or EU-West-1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
== Verifier Stage Environment ==&lt;br /&gt;
* NOTE: In an upcoming deployment, the Verifier functionality will be rolled into the Tokenserver stack of services.&lt;br /&gt;
&lt;br /&gt;
* URLs&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net&lt;br /&gt;
** IdP: http://mockmyid.s3-website-us-west-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
* Version:&lt;br /&gt;
** rpm -qa | grep verifier&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Shared:&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-rabbitmq&lt;br /&gt;
*** shared-rabbitmq  &lt;br /&gt;
*** shared-bastion&lt;br /&gt;
*** shared-heka&lt;br /&gt;
&lt;br /&gt;
** fxa-browserid_verifier or fxa-bv-stage (usually a single instance)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/fxa-browserid-verifier&lt;br /&gt;
*** esp. /data/fxa-browserid-verifier/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
*** esp. the /etc/puppet/yaml/app files&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Search for node, heka, nginx, circus&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/squid/access.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stderr.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/puppet/modules/hekad&lt;br /&gt;
** /data/hekad&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** Old Dev IAM&lt;br /&gt;
*** SSH with AWS keys to the Stage bastion host in US-East-1. From there SSH directly into any instance.&lt;br /&gt;
** New Dev IAM&lt;br /&gt;
*** SSH with AWS keys to the Stage bastion host in US-East-1 or EU-West-1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
* Quick verifications&lt;br /&gt;
 Browser: https://verifier.stage.mozaws.net/&lt;br /&gt;
 returns &amp;quot;Method Not Allowed&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $ curl https://verifier.stage.mozaws.net&lt;br /&gt;
 returns &amp;quot;Method Not Allowed&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $ curl -I https://verifier.stage.mozaws.net&lt;br /&gt;
 HTTP/1.1 405 Method Not Allowed&lt;br /&gt;
 Cache-Control: no-cache, max-age=0&lt;br /&gt;
 Content-length: 18&lt;br /&gt;
 Content-Type: text/plain&lt;br /&gt;
 Date: Wed, 23 Jul 2014 20:19:40 GMT&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
== Sync 1.5 Stage Environment ==&lt;br /&gt;
* This is a work in progress. Right now, there are only a small number of sync nodes (instances) in AWS.&lt;br /&gt;
* URLs&lt;br /&gt;
** https://sync-1-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-2-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-3-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-4-us-east-1.stage.mozaws.net&lt;br /&gt;
** and sometimes&lt;br /&gt;
** https://sync-5-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-6-us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
 Server-Syncstorage (sync node):&lt;br /&gt;
 rpm -qa | grep syncstorage&lt;br /&gt;
 Example: server-syncstorage &amp;lt;latest version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Search for sync node instances in US East: &amp;quot;stage-sync-node-X&amp;quot;&lt;br /&gt;
** Each node is a specific large instance (mixed m3 and c3)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/server-syncstorage/*&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Search for sync, mysql, circusd, hekad, nginx, memcached&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/logs/nginx/access.log&lt;br /&gt;
** /media/ephemeral0/logs/nginx/error.log&lt;br /&gt;
** /media/ephemeral0/logs/sync/sync.err&lt;br /&gt;
** /media/ephemeral0/logs/sync/sync.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/sync_1_5.stderr.log&lt;br /&gt;
** /var/log/hekad/sync_1_5.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/heka.d/sync_1_5.toml&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
&lt;br /&gt;
* Note: There is no longer a Sync 1.1 Stage environment.&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* Details on the Loads V1 cluster are available at this link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Stackdriver:&lt;br /&gt;
** Stage main: https://app.stackdriver.com&lt;br /&gt;
** https://app.stackdriver.com/groups/4388/stage-services-tag-sync15&lt;br /&gt;
** https://app.stackdriver.com/groups/4389/stage-services-tag-sync15/stage-services-sync15/fxa-verifier&lt;br /&gt;
** https://app.stackdriver.com/groups/4391/stage-services-tag-sync15/stage-services-tag-sync15/sync-storage&lt;br /&gt;
** https://app.stackdriver.com/groups/4390/stage-services-tag-sync15/stage-services-sync15/tokenserver&lt;br /&gt;
** https://app.stackdriver.com/monitoring/3827/tokenserver&lt;br /&gt;
** https://app.stackdriver.com/instances/&amp;lt;AWS instance&amp;gt;&lt;br /&gt;
** Also, make use of the Services, Groups, and Dashboards for more specific links&lt;br /&gt;
*** Example: Services &amp;gt; https://app.stackdriver.com/services/nginx&lt;br /&gt;
*** Example: Groups &amp;gt; https://app.stackdriver.com/groups/4390/stage-services-tag-sync15/stage-services-sync15/tokenserver&lt;br /&gt;
&lt;br /&gt;
* Graphite:&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Kibana&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_http_status.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_http_errors.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_mysql_slow_queries.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_app_logs.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/tokenserver_http_status.json&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
** or https://heka.shared.us-east-1.stage.mozaws.net/#health&lt;br /&gt;
** Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/TokenServerHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-ActiveDailyUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-SlowQueries&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-ResponseTime&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-HTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-FrequentUsersAggregator&lt;br /&gt;
** Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-NginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-SlowQueryFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerLocalVerifierFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-FileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-NginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerNginxFileOutput&lt;br /&gt;
** Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-FileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-SlowQueryFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerLocalVerifierFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-NginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-NginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-SlowQueries/outputs/Sync-1_5-SlowQueries.Statistics.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-ResponseTime/outputs/Sync-1_5-ResponseTime.storagemetaglobal.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Heka shared:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-FrequentUsersAggregator&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-ResponseTime&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-SlowQueries&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-ActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-HTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/TokenServerHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Kibana shared: &lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/file/default.json&lt;br /&gt;
&lt;br /&gt;
* StackDriver:&lt;br /&gt;
** Main: https://app.stackdriver.com/&lt;br /&gt;
&lt;br /&gt;
== TokenServer, Verifier, and Sync 1.5 Dev Environments ==&lt;br /&gt;
* URLs&lt;br /&gt;
** https://sync1.dev.lcip.org/&lt;br /&gt;
** https://token.dev.lcip.org/&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
 TokenServer:&lt;br /&gt;
 rpm -qa | grep token&lt;br /&gt;
 Example: tokenserver-svcops &amp;lt;latest version&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Verifier:&lt;br /&gt;
 rpm -qa | grep verifier&lt;br /&gt;
 Example: fxa-browserid-verifier-svcops &amp;lt;latest version&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Server-Syncstorage (sync node):&lt;br /&gt;
 rpm -qa | grep syncstorage&lt;br /&gt;
 Example: server-syncstorage &amp;lt;latest version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is part of the dev-lcip-org CloudFormation stack&lt;br /&gt;
*** TokenServer: Search for the fxa-tokenserver instance&lt;br /&gt;
*** SyncServer2: Search for the fxa-syncstorage instance&lt;br /&gt;
*** SyncServer1: Search for the fxa-syncstorage instance&lt;br /&gt;
*** LogServer:  Search for the fxa-logbox instance&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
* QA Access&lt;br /&gt;
** SSH with AWS keys to the various instances&lt;br /&gt;
* Firefox configs:&lt;br /&gt;
** services.sync.clusterURL = https://sync1.dev.lcip.org/ (should get automatically set by the TokenServer)&lt;br /&gt;
** services.sync.tokenServerURI = https://token.dev.lcip.org/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/sync&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/token&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1029301</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1029301"/>
		<updated>2014-10-29T20:11:40Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* MSISDN Mock Server Stage Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.services.mozilla.com/__heartbeat__&lt;br /&gt;
 {&amp;quot;storage&amp;quot;:true,&amp;quot;provider&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.services.mozilla.com/push-server-config&lt;br /&gt;
 {&amp;quot;pushServerURI&amp;quot;:&amp;quot;wss://push.services.mozilla.com/&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 now returns all of this info:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
      bunch of loop-client specific info&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 In the browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
** Sentry: http://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/push-server-config&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for four loop-client-* stacks&lt;br /&gt;
** ELB: loopstage1-loo-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One loop-client instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 or 6.5&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
*** default.access.log&lt;br /&gt;
*** default.error.log&lt;br /&gt;
*** loop-client.access.log&lt;br /&gt;
*** loop-client.error.log&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 Check the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
  serverUrl: &#039;https://loop.stage.mozaws.net&#039;,&lt;br /&gt;
  and a bunch of other loop-client specific stuff&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep msisdn&lt;br /&gt;
&lt;br /&gt;
* Version string&lt;br /&gt;
** /data/msisdn-gateway/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage or msisdnstage1&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt; or msisdnstage1-m-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance, look for msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
** /etc/puppet/yaml/app, especially&lt;br /&gt;
*** msisdn_gateway.dev.yaml&lt;br /&gt;
*** msisdn_gateway.prod.yaml&lt;br /&gt;
*** msisdn_gateway.stage.yaml&lt;br /&gt;
*** msisdn_gateway.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/msisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/msisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is in the new Dev IAM&lt;br /&gt;
** This is one t2.small&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** http://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* Old Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
* New Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1 or EU-West-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** https://app.stackdriver.com/groups/11042/loop-server/stage-loop&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/groups/11044/loop-server/prod-loop&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1029169</id>
		<title>TestEngineering/Services/LoopServerLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1029169"/>
		<updated>2014-10-29T16:37:20Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Quick Verification Of Stage Deployments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 Check the following in the browser:&lt;br /&gt;
      https://loop.stage.mozaws.net&lt;br /&gt;
      https://loop.stage.mozaws.net/__heartbeat__&lt;br /&gt;
      https://loop.stage.mozaws.net/push-server-config&lt;br /&gt;
 Or:&lt;br /&gt;
     curl https://loop.stage.mozaws.net&lt;br /&gt;
     curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 Check https://call.stage.mozaws.net/config.js&lt;br /&gt;
 Should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
 and&lt;br /&gt;
 WIP from the client team: end to end tests&lt;br /&gt;
 Also:&lt;br /&gt;
 https://call.stage.mozaws.net&lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd msisdn-gateway&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Quick Verification of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment for after each Production deployment.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 In the browser: &lt;br /&gt;
      https://loop.services.mozilla.com&lt;br /&gt;
      https://loop.services.mozilla.com/__heartbeat__&lt;br /&gt;
      https://loop.services.mozilla.com/push-server-config&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Then run a few &#039;make test&#039; commands from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://loop.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party server&lt;br /&gt;
 &lt;br /&gt;
 Then perform actual loop testing via desktop (Aurora/Nightly so far) and FxOS (2.1)&lt;br /&gt;
 Verify that requests and strings point to Production environments&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 should return &amp;quot;Welcome to the Loop web client.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/config.js&lt;br /&gt;
 should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 should return the version and build string info&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com&lt;br /&gt;
 curl -I https://call.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Quick end-to-end tests:&lt;br /&gt;
 Desktop: browser to browser&lt;br /&gt;
 Desktop to FxOS&lt;br /&gt;
 FxOS to Desktop&lt;br /&gt;
 Two FxOS devices&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
 Or&lt;br /&gt;
 Run a single &#039;make test&#039; command from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://msisdn.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party, so limit the check to a single run.&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Installing Loop-Server and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 git clone https://github.com/mozilla-services/loop-server.git&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 Note: You may want to install a specific branch for testing vs defaulting to Master&lt;br /&gt;
 npm install&lt;br /&gt;
 ulimit -S -n 2048&lt;br /&gt;
 npm test *&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make build&lt;br /&gt;
 make test&lt;br /&gt;
 &lt;br /&gt;
 Coverage report can be found here:&lt;br /&gt;
 /loop-server/coverage/lcov-report/index.html&lt;br /&gt;
 &lt;br /&gt;
 * This step requires the redis server to be installed and running:&lt;br /&gt;
 Mac:&lt;br /&gt;
 brew install redis&lt;br /&gt;
 redis-server /usr/local/etc/redis.conf&lt;br /&gt;
 &lt;br /&gt;
 Ubuntu Linux:&lt;br /&gt;
 sudo apt-get install redis-server&lt;br /&gt;
 sudo /usr/bin/redis-server /etc/redis/redis.conf&lt;br /&gt;
 sudo tail -f /var/log/redis/redis-server.log&lt;br /&gt;
 &lt;br /&gt;
 RHEL Linux:&lt;br /&gt;
 Install redis from here: http://download.redis.io/releases&lt;br /&gt;
 then&lt;br /&gt;
 /usr/local/bin/redis-server /home/ec2-user/redis-2.8.9/redis.conf&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the Loop-Server.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Loop-Server in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ cd loop-server/loadtests&lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Loop-Server in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing MSISDN-Gateway and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
** Install gmp, gmp-dev or gmp-devel&lt;br /&gt;
** Install ruby (very latest), ruby-dev or ruby-devel&lt;br /&gt;
** Install gem (required for fake_dynamo)&lt;br /&gt;
** Verify that gem is in your path&lt;br /&gt;
** Install redis-server to run the unit tests&lt;br /&gt;
&lt;br /&gt;
* To install gmp&lt;br /&gt;
 sudo yum -y install gmp, gmp-devel&lt;br /&gt;
 or for Ubuntu&lt;br /&gt;
 $ wget https://ftp.gnu.org/gnu/gmp/gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ tar xvjf gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ cd gmp-6.0.0&lt;br /&gt;
 $ ./configure --prefix=/usr&lt;br /&gt;
 $ make&lt;br /&gt;
 $ make check&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
* To install ruby:&lt;br /&gt;
 sudo yum -y install ruby, ruby-devel&lt;br /&gt;
 or&lt;br /&gt;
 sudo apt-get install ruby, ruby-dev&lt;br /&gt;
 &lt;br /&gt;
 If this does not get you 1.9.3 or newer, then install manually:&lt;br /&gt;
 Example:&lt;br /&gt;
     $ wget http://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p547.tar.gz&lt;br /&gt;
     $ ./configure --prefix=/usr&lt;br /&gt;
     $ make&lt;br /&gt;
     $ sudo make install&lt;br /&gt;
     (because for rhel, the default ruby version is 1.8.x.)&lt;br /&gt;
 REF:&lt;br /&gt;
 Main: https://www.ruby-lang.org/en/downloads/&lt;br /&gt;
 Dev Tools: http://rubyinstaller.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
* To install gem:&lt;br /&gt;
 Grab rubygems from here: http://rubygems.org/pages/download&lt;br /&gt;
 cd to rubygems directory&lt;br /&gt;
 $ sudo ruby setup.rb&lt;br /&gt;
&lt;br /&gt;
* To install fake_dynamo:&lt;br /&gt;
 You should not have to install fake_dynamo since it is now part of the repo installer.&lt;br /&gt;
 But if you do:&lt;br /&gt;
 $ sudo gem install fake_dynamo&lt;br /&gt;
 REF: https://github.com/ananthakumaran/fake_dynamo&lt;br /&gt;
&lt;br /&gt;
* Install the msisdn-gateway repo:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/msisdn-gateway.git&lt;br /&gt;
 $ cd msisdn-gateway&lt;br /&gt;
 Note: You may want to install a specific branch for testing vs defaulting to Master&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
 (There is a bug open about the requirement to install with &#039;sudo&#039;)&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with MSISDN-Gateway.&lt;br /&gt;
&lt;br /&gt;
* Unit testing&lt;br /&gt;
 Get redis-server installed&lt;br /&gt;
 Start the server in a separate terminal or in the background with logging active&lt;br /&gt;
 $ make test&lt;br /&gt;
 The coverage report is here: msisdn-gateway/coverage/lcov-report/index.html&lt;br /&gt;
&lt;br /&gt;
* Bugs:&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036158&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036174&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048451&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048456&lt;br /&gt;
&lt;br /&gt;
== Running the load test against MSISDN-Gateway in Stage ==&lt;br /&gt;
* Building the load tests&lt;br /&gt;
 $ cd loadtests&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* To load test the Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the MSISDN-Gateway ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json &lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users &lt;br /&gt;
&lt;br /&gt;
** For make bench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test &lt;br /&gt;
&lt;br /&gt;
** For make megabench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Broker to use for testing (leaves as defined for now - this is broker in the Loads Cluster)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel)&lt;br /&gt;
&lt;br /&gt;
* Loop-Server load test code&lt;br /&gt;
** The Loop-Server load test can not currently be configured in the code&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway load test code&lt;br /&gt;
** The MSISDN-Gateway load test can be configured in the code - see the following lines: &lt;br /&gt;
** Test server URL: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L15&lt;br /&gt;
** Error percentages: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
&lt;br /&gt;
* General REFs: &lt;br /&gt;
** https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* Loop-Server&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Custom Metrics&lt;br /&gt;
** Opened web sockets&lt;br /&gt;
** Total web sockets&lt;br /&gt;
** Bytes/websockets&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway Custom Metrics&lt;br /&gt;
** mt-flow&lt;br /&gt;
** ask-for-certificate&lt;br /&gt;
** try-wrong-code&lt;br /&gt;
** try-right-code&lt;br /&gt;
** momt-flow&lt;br /&gt;
** omxen-message-collision&lt;br /&gt;
** register&lt;br /&gt;
** unregister&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for Loop-Server (per server)&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/loop_err.log&lt;br /&gt;
** /var/log/loop_out.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /var/log/nginx/access.log&lt;br /&gt;
** /var/log/nginx/error.log &lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for MSISDN-Gateway (per server)&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable Loop-Server errors:&lt;br /&gt;
 hekad loop.stderr.log&lt;br /&gt;
 The following are acceptable:&lt;br /&gt;
 Decoder &#039;LoopServer-LoopServerDecoder&#039; error: Failed parsing&lt;br /&gt;
 Plugin &#039;AggregatorOutput&#039; error: writing to heka.shared....&lt;br /&gt;
 &lt;br /&gt;
 nginx logs:&lt;br /&gt;
 The 200s (good stuff) and 101s (websockets) are acceptable. &lt;br /&gt;
 The 499s are an artifact of the current load testing tool (V1).&lt;br /&gt;
 You should only see them at the end of the load test.&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 Any percentage of 405s, 502s, or 503s is not acceptable.&lt;br /&gt;
 &lt;br /&gt;
 Application logs:&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 See the loop_server.out.log file.&lt;br /&gt;
 &lt;br /&gt;
 /var/log/loop_err.log&lt;br /&gt;
 The following are acceptable: connect: res.on(&amp;quot;header&amp;quot;): use on-headers module directly&lt;br /&gt;
 &lt;br /&gt;
 In the Loads Cluster dashboard, watch for the following errors/failures:&lt;br /&gt;
 string indices must be integers&lt;br /&gt;
 OR&lt;br /&gt;
 No JSON object could be decoded&lt;br /&gt;
 OR&lt;br /&gt;
 &#039;hawk-session-token&#039;&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable MSISDN-Gateway errors:&lt;br /&gt;
 The updated load test does generate a certain percentage of errors:&lt;br /&gt;
 https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
 So, expect to see a predefined percentage of 204s and 400s, along with the usual 200s in the nginx access logs.&lt;br /&gt;
 The msisdn-gateway app logs should be clean with just msisdn and test data.&lt;br /&gt;
&lt;br /&gt;
== Monitoring Loop Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard: &lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: &lt;br /&gt;
** https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
** https://app.stackdriver.com/groups/11042/loop-server/stage-loop&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Loop Server: Check the following repos:&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla-services/docs/issues&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/issues&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** and in Bugzilla for non-Verified bugs: http://mzl.la/1qPxizw&lt;br /&gt;
&lt;br /&gt;
* OPs and Infra&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Repositories and Documentation&lt;br /&gt;
** Check here: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#References&lt;br /&gt;
&lt;br /&gt;
* The QA Test Environments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments&lt;br /&gt;
&lt;br /&gt;
* Test Plans and other QA&lt;br /&gt;
** https://docs.google.com/a/mozilla.com/document/d/1xYZijHnJ1JeJhONm2AYvxSnD2tWztC16WGFyD5U_d6g/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop/Try_Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA#Server&lt;br /&gt;
** https://intranet.mozilla.org/QA/Loop/MVP&lt;br /&gt;
&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1029167</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1029167"/>
		<updated>2014-10-29T16:35:14Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Loop Server Stage Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.services.mozilla.com/__heartbeat__&lt;br /&gt;
 {&amp;quot;storage&amp;quot;:true,&amp;quot;provider&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.services.mozilla.com/push-server-config&lt;br /&gt;
 {&amp;quot;pushServerURI&amp;quot;:&amp;quot;wss://push.services.mozilla.com/&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 now returns all of this info:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
      bunch of loop-client specific info&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 In the browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
** Sentry: http://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/push-server-config&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for four loop-client-* stacks&lt;br /&gt;
** ELB: loopstage1-loo-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One loop-client instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 or 6.5&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
*** default.access.log&lt;br /&gt;
*** default.error.log&lt;br /&gt;
*** loop-client.access.log&lt;br /&gt;
*** loop-client.error.log&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 Check the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
  serverUrl: &#039;https://loop.stage.mozaws.net&#039;,&lt;br /&gt;
  and a bunch of other loop-client specific stuff&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep msisdn&lt;br /&gt;
&lt;br /&gt;
* Version string&lt;br /&gt;
** /data/msisdn-gateway/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage or msisdnstage1&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt; or msisdnstage1-m-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance, look for msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
** /etc/puppet/yaml/app, especially&lt;br /&gt;
*** msisdn_gateway.dev.yaml&lt;br /&gt;
*** msisdn_gateway.prod.yaml&lt;br /&gt;
*** msisdn_gateway.stage.yaml&lt;br /&gt;
*** msisdn_gateway.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/msisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/msisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** http://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* Old Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
* New Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1 or EU-West-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** https://app.stackdriver.com/groups/11042/loop-server/stage-loop&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/groups/11044/loop-server/prod-loop&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1029166</id>
		<title>TestEngineering/Services/LoopServerLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1029166"/>
		<updated>2014-10-29T16:34:27Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Quick Verification of Production Deployments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 Check https://call.stage.mozaws.net/config.js&lt;br /&gt;
 Should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
 and&lt;br /&gt;
 WIP from the client team: end to end tests&lt;br /&gt;
 Also:&lt;br /&gt;
 https://call.stage.mozaws.net&lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd msisdn-gateway&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Quick Verification of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment for after each Production deployment.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 In the browser: &lt;br /&gt;
      https://loop.services.mozilla.com&lt;br /&gt;
      https://loop.services.mozilla.com/__heartbeat__&lt;br /&gt;
      https://loop.services.mozilla.com/push-server-config&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Then run a few &#039;make test&#039; commands from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://loop.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party server&lt;br /&gt;
 &lt;br /&gt;
 Then perform actual loop testing via desktop (Aurora/Nightly so far) and FxOS (2.1)&lt;br /&gt;
 Verify that requests and strings point to Production environments&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 should return &amp;quot;Welcome to the Loop web client.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/config.js&lt;br /&gt;
 should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 should return the version and build string info&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com&lt;br /&gt;
 curl -I https://call.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Quick end-to-end tests:&lt;br /&gt;
 Desktop: browser to browser&lt;br /&gt;
 Desktop to FxOS&lt;br /&gt;
 FxOS to Desktop&lt;br /&gt;
 Two FxOS devices&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
 Or&lt;br /&gt;
 Run a single &#039;make test&#039; command from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://msisdn.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party, so limit the check to a single run.&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Installing Loop-Server and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 git clone https://github.com/mozilla-services/loop-server.git&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 Note: You may want to install a specific branch for testing vs defaulting to Master&lt;br /&gt;
 npm install&lt;br /&gt;
 ulimit -S -n 2048&lt;br /&gt;
 npm test *&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make build&lt;br /&gt;
 make test&lt;br /&gt;
 &lt;br /&gt;
 Coverage report can be found here:&lt;br /&gt;
 /loop-server/coverage/lcov-report/index.html&lt;br /&gt;
 &lt;br /&gt;
 * This step requires the redis server to be installed and running:&lt;br /&gt;
 Mac:&lt;br /&gt;
 brew install redis&lt;br /&gt;
 redis-server /usr/local/etc/redis.conf&lt;br /&gt;
 &lt;br /&gt;
 Ubuntu Linux:&lt;br /&gt;
 sudo apt-get install redis-server&lt;br /&gt;
 sudo /usr/bin/redis-server /etc/redis/redis.conf&lt;br /&gt;
 sudo tail -f /var/log/redis/redis-server.log&lt;br /&gt;
 &lt;br /&gt;
 RHEL Linux:&lt;br /&gt;
 Install redis from here: http://download.redis.io/releases&lt;br /&gt;
 then&lt;br /&gt;
 /usr/local/bin/redis-server /home/ec2-user/redis-2.8.9/redis.conf&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the Loop-Server.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Loop-Server in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ cd loop-server/loadtests&lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Loop-Server in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing MSISDN-Gateway and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
** Install gmp, gmp-dev or gmp-devel&lt;br /&gt;
** Install ruby (very latest), ruby-dev or ruby-devel&lt;br /&gt;
** Install gem (required for fake_dynamo)&lt;br /&gt;
** Verify that gem is in your path&lt;br /&gt;
** Install redis-server to run the unit tests&lt;br /&gt;
&lt;br /&gt;
* To install gmp&lt;br /&gt;
 sudo yum -y install gmp, gmp-devel&lt;br /&gt;
 or for Ubuntu&lt;br /&gt;
 $ wget https://ftp.gnu.org/gnu/gmp/gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ tar xvjf gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ cd gmp-6.0.0&lt;br /&gt;
 $ ./configure --prefix=/usr&lt;br /&gt;
 $ make&lt;br /&gt;
 $ make check&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
* To install ruby:&lt;br /&gt;
 sudo yum -y install ruby, ruby-devel&lt;br /&gt;
 or&lt;br /&gt;
 sudo apt-get install ruby, ruby-dev&lt;br /&gt;
 &lt;br /&gt;
 If this does not get you 1.9.3 or newer, then install manually:&lt;br /&gt;
 Example:&lt;br /&gt;
     $ wget http://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p547.tar.gz&lt;br /&gt;
     $ ./configure --prefix=/usr&lt;br /&gt;
     $ make&lt;br /&gt;
     $ sudo make install&lt;br /&gt;
     (because for rhel, the default ruby version is 1.8.x.)&lt;br /&gt;
 REF:&lt;br /&gt;
 Main: https://www.ruby-lang.org/en/downloads/&lt;br /&gt;
 Dev Tools: http://rubyinstaller.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
* To install gem:&lt;br /&gt;
 Grab rubygems from here: http://rubygems.org/pages/download&lt;br /&gt;
 cd to rubygems directory&lt;br /&gt;
 $ sudo ruby setup.rb&lt;br /&gt;
&lt;br /&gt;
* To install fake_dynamo:&lt;br /&gt;
 You should not have to install fake_dynamo since it is now part of the repo installer.&lt;br /&gt;
 But if you do:&lt;br /&gt;
 $ sudo gem install fake_dynamo&lt;br /&gt;
 REF: https://github.com/ananthakumaran/fake_dynamo&lt;br /&gt;
&lt;br /&gt;
* Install the msisdn-gateway repo:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/msisdn-gateway.git&lt;br /&gt;
 $ cd msisdn-gateway&lt;br /&gt;
 Note: You may want to install a specific branch for testing vs defaulting to Master&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
 (There is a bug open about the requirement to install with &#039;sudo&#039;)&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with MSISDN-Gateway.&lt;br /&gt;
&lt;br /&gt;
* Unit testing&lt;br /&gt;
 Get redis-server installed&lt;br /&gt;
 Start the server in a separate terminal or in the background with logging active&lt;br /&gt;
 $ make test&lt;br /&gt;
 The coverage report is here: msisdn-gateway/coverage/lcov-report/index.html&lt;br /&gt;
&lt;br /&gt;
* Bugs:&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036158&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036174&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048451&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048456&lt;br /&gt;
&lt;br /&gt;
== Running the load test against MSISDN-Gateway in Stage ==&lt;br /&gt;
* Building the load tests&lt;br /&gt;
 $ cd loadtests&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* To load test the Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the MSISDN-Gateway ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json &lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users &lt;br /&gt;
&lt;br /&gt;
** For make bench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test &lt;br /&gt;
&lt;br /&gt;
** For make megabench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Broker to use for testing (leaves as defined for now - this is broker in the Loads Cluster)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel)&lt;br /&gt;
&lt;br /&gt;
* Loop-Server load test code&lt;br /&gt;
** The Loop-Server load test can not currently be configured in the code&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway load test code&lt;br /&gt;
** The MSISDN-Gateway load test can be configured in the code - see the following lines: &lt;br /&gt;
** Test server URL: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L15&lt;br /&gt;
** Error percentages: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
&lt;br /&gt;
* General REFs: &lt;br /&gt;
** https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* Loop-Server&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Custom Metrics&lt;br /&gt;
** Opened web sockets&lt;br /&gt;
** Total web sockets&lt;br /&gt;
** Bytes/websockets&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway Custom Metrics&lt;br /&gt;
** mt-flow&lt;br /&gt;
** ask-for-certificate&lt;br /&gt;
** try-wrong-code&lt;br /&gt;
** try-right-code&lt;br /&gt;
** momt-flow&lt;br /&gt;
** omxen-message-collision&lt;br /&gt;
** register&lt;br /&gt;
** unregister&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for Loop-Server (per server)&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/loop_err.log&lt;br /&gt;
** /var/log/loop_out.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /var/log/nginx/access.log&lt;br /&gt;
** /var/log/nginx/error.log &lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for MSISDN-Gateway (per server)&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable Loop-Server errors:&lt;br /&gt;
 hekad loop.stderr.log&lt;br /&gt;
 The following are acceptable:&lt;br /&gt;
 Decoder &#039;LoopServer-LoopServerDecoder&#039; error: Failed parsing&lt;br /&gt;
 Plugin &#039;AggregatorOutput&#039; error: writing to heka.shared....&lt;br /&gt;
 &lt;br /&gt;
 nginx logs:&lt;br /&gt;
 The 200s (good stuff) and 101s (websockets) are acceptable. &lt;br /&gt;
 The 499s are an artifact of the current load testing tool (V1).&lt;br /&gt;
 You should only see them at the end of the load test.&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 Any percentage of 405s, 502s, or 503s is not acceptable.&lt;br /&gt;
 &lt;br /&gt;
 Application logs:&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 See the loop_server.out.log file.&lt;br /&gt;
 &lt;br /&gt;
 /var/log/loop_err.log&lt;br /&gt;
 The following are acceptable: connect: res.on(&amp;quot;header&amp;quot;): use on-headers module directly&lt;br /&gt;
 &lt;br /&gt;
 In the Loads Cluster dashboard, watch for the following errors/failures:&lt;br /&gt;
 string indices must be integers&lt;br /&gt;
 OR&lt;br /&gt;
 No JSON object could be decoded&lt;br /&gt;
 OR&lt;br /&gt;
 &#039;hawk-session-token&#039;&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable MSISDN-Gateway errors:&lt;br /&gt;
 The updated load test does generate a certain percentage of errors:&lt;br /&gt;
 https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
 So, expect to see a predefined percentage of 204s and 400s, along with the usual 200s in the nginx access logs.&lt;br /&gt;
 The msisdn-gateway app logs should be clean with just msisdn and test data.&lt;br /&gt;
&lt;br /&gt;
== Monitoring Loop Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard: &lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: &lt;br /&gt;
** https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
** https://app.stackdriver.com/groups/11042/loop-server/stage-loop&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Loop Server: Check the following repos:&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla-services/docs/issues&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/issues&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** and in Bugzilla for non-Verified bugs: http://mzl.la/1qPxizw&lt;br /&gt;
&lt;br /&gt;
* OPs and Infra&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Repositories and Documentation&lt;br /&gt;
** Check here: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#References&lt;br /&gt;
&lt;br /&gt;
* The QA Test Environments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments&lt;br /&gt;
&lt;br /&gt;
* Test Plans and other QA&lt;br /&gt;
** https://docs.google.com/a/mozilla.com/document/d/1xYZijHnJ1JeJhONm2AYvxSnD2tWztC16WGFyD5U_d6g/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop/Try_Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA#Server&lt;br /&gt;
** https://intranet.mozilla.org/QA/Loop/MVP&lt;br /&gt;
&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1029165</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1029165"/>
		<updated>2014-10-29T16:33:28Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Loop Server Production Environments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.services.mozilla.com/__heartbeat__&lt;br /&gt;
 {&amp;quot;storage&amp;quot;:true,&amp;quot;provider&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.services.mozilla.com/push-server-config&lt;br /&gt;
 {&amp;quot;pushServerURI&amp;quot;:&amp;quot;wss://push.services.mozilla.com/&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 now returns all of this info:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
      bunch of loop-client specific info&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 In the browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
** Sentry: http://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/__heartbeat__&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for four loop-client-* stacks&lt;br /&gt;
** ELB: loopstage1-loo-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One loop-client instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 or 6.5&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
*** default.access.log&lt;br /&gt;
*** default.error.log&lt;br /&gt;
*** loop-client.access.log&lt;br /&gt;
*** loop-client.error.log&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 Check the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
  serverUrl: &#039;https://loop.stage.mozaws.net&#039;,&lt;br /&gt;
  and a bunch of other loop-client specific stuff&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep msisdn&lt;br /&gt;
&lt;br /&gt;
* Version string&lt;br /&gt;
** /data/msisdn-gateway/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage or msisdnstage1&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt; or msisdnstage1-m-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance, look for msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
** /etc/puppet/yaml/app, especially&lt;br /&gt;
*** msisdn_gateway.dev.yaml&lt;br /&gt;
*** msisdn_gateway.prod.yaml&lt;br /&gt;
*** msisdn_gateway.stage.yaml&lt;br /&gt;
*** msisdn_gateway.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/msisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/msisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** http://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* Old Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
* New Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1 or EU-West-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** https://app.stackdriver.com/groups/11042/loop-server/stage-loop&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/groups/11044/loop-server/prod-loop&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028994</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028994"/>
		<updated>2014-10-29T00:38:10Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Loop Server Production Environments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.services.mozilla.com/__heartbeat__&lt;br /&gt;
 {&amp;quot;storage&amp;quot;:true,&amp;quot;provider&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 now returns all of this info:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
      bunch of loop-client specific info&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 In the browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
** Sentry: http://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/__heartbeat__&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for four loop-client-* stacks&lt;br /&gt;
** ELB: loopstage1-loo-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One loop-client instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 or 6.5&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
*** default.access.log&lt;br /&gt;
*** default.error.log&lt;br /&gt;
*** loop-client.access.log&lt;br /&gt;
*** loop-client.error.log&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 Check the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
  serverUrl: &#039;https://loop.stage.mozaws.net&#039;,&lt;br /&gt;
  and a bunch of other loop-client specific stuff&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep msisdn&lt;br /&gt;
&lt;br /&gt;
* Version string&lt;br /&gt;
** /data/msisdn-gateway/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage or msisdnstage1&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt; or msisdnstage1-m-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance, look for msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
** /etc/puppet/yaml/app, especially&lt;br /&gt;
*** msisdn_gateway.dev.yaml&lt;br /&gt;
*** msisdn_gateway.prod.yaml&lt;br /&gt;
*** msisdn_gateway.stage.yaml&lt;br /&gt;
*** msisdn_gateway.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/msisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/msisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** http://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* Old Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
* New Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1 or EU-West-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** https://app.stackdriver.com/groups/11042/loop-server/stage-loop&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/groups/11044/loop-server/prod-loop&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028990</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028990"/>
		<updated>2014-10-29T00:25:39Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* MSISDN Gateway Server Stage Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 now returns all of this info:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
      bunch of loop-client specific info&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
** Sentry: http://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/__heartbeat__&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for four loop-client-* stacks&lt;br /&gt;
** ELB: loopstage1-loo-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One loop-client instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 or 6.5&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
*** default.access.log&lt;br /&gt;
*** default.error.log&lt;br /&gt;
*** loop-client.access.log&lt;br /&gt;
*** loop-client.error.log&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 Check the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
  serverUrl: &#039;https://loop.stage.mozaws.net&#039;,&lt;br /&gt;
  and a bunch of other loop-client specific stuff&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep msisdn&lt;br /&gt;
&lt;br /&gt;
* Version string&lt;br /&gt;
** /data/msisdn-gateway/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage or msisdnstage1&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt; or msisdnstage1-m-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance, look for msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
** /etc/puppet/yaml/app, especially&lt;br /&gt;
*** msisdn_gateway.dev.yaml&lt;br /&gt;
*** msisdn_gateway.prod.yaml&lt;br /&gt;
*** msisdn_gateway.stage.yaml&lt;br /&gt;
*** msisdn_gateway.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/msisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/msisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** http://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* Old Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
* New Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1 or EU-West-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** https://app.stackdriver.com/groups/11042/loop-server/stage-loop&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/groups/11044/loop-server/prod-loop&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028988</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028988"/>
		<updated>2014-10-29T00:13:50Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Loop Client Stage Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 now returns all of this info:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
      bunch of loop-client specific info&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
** Sentry: http://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/__heartbeat__&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for four loop-client-* stacks&lt;br /&gt;
** ELB: loopstage1-loo-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One loop-client instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 or 6.5&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
*** default.access.log&lt;br /&gt;
*** default.error.log&lt;br /&gt;
*** loop-client.access.log&lt;br /&gt;
*** loop-client.error.log&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 Check the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
  serverUrl: &#039;https://loop.stage.mozaws.net&#039;,&lt;br /&gt;
  and a bunch of other loop-client specific stuff&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* Version string&lt;br /&gt;
** /data/msisdn-gateway/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** http://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* Old Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
* New Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1 or EU-West-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** https://app.stackdriver.com/groups/11042/loop-server/stage-loop&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/groups/11044/loop-server/prod-loop&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028987</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028987"/>
		<updated>2014-10-29T00:10:01Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Loop Server Stage Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 now returns all of this info:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
      bunch of loop-client specific info&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
** Sentry: http://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/__heartbeat__&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for loop-client-*&lt;br /&gt;
** ELB: loop-client-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 or 6.5&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
*** default.access.log&lt;br /&gt;
*** default.error.log&lt;br /&gt;
*** loop-client.access.log&lt;br /&gt;
*** loop-client.error.log&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 Check the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
  serverUrl: &#039;https://loop.stage.mozaws.net&#039;,&lt;br /&gt;
  and a bunch of other loop-client specific stuff&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* Version string&lt;br /&gt;
** /data/msisdn-gateway/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** http://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* Old Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
* New Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1 or EU-West-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** https://app.stackdriver.com/groups/11042/loop-server/stage-loop&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/groups/11044/loop-server/prod-loop&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028986</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028986"/>
		<updated>2014-10-29T00:06:49Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Loop Server Stage Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 now returns all of this info:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
      bunch of loop-client specific info&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
** Sentry: http://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for loop-client-*&lt;br /&gt;
** ELB: loop-client-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 or 6.5&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
*** default.access.log&lt;br /&gt;
*** default.error.log&lt;br /&gt;
*** loop-client.access.log&lt;br /&gt;
*** loop-client.error.log&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 Check the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
  serverUrl: &#039;https://loop.stage.mozaws.net&#039;,&lt;br /&gt;
  and a bunch of other loop-client specific stuff&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* Version string&lt;br /&gt;
** /data/msisdn-gateway/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** http://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* Old Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
* New Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1 or EU-West-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** https://app.stackdriver.com/groups/11042/loop-server/stage-loop&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/groups/11044/loop-server/prod-loop&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TSVerifierSyncTestEnvironments&amp;diff=1028980</id>
		<title>TestEngineering/Services/TSVerifierSyncTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TSVerifierSyncTestEnvironments&amp;diff=1028980"/>
		<updated>2014-10-28T23:53:39Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Verifier Stage Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* NOTE: We currently have two Verifier stacks in Stage (and probably Production): &lt;br /&gt;
** The standalone Browser_ID Verifier stack: See that Verifier Stage section below...&lt;br /&gt;
** A Tokenserver+Verifier stack: See the TokenServer Stage section below...&lt;br /&gt;
&lt;br /&gt;
== Tokenserver, Verifier, and Sync Production Environments ==&lt;br /&gt;
* TokenServer: https://token.services.mozilla.com&lt;br /&gt;
* Verifier: https://verifier.accounts.firefox.com&lt;br /&gt;
* Sync 1.5 Nodes (for now in AWS):&lt;br /&gt;
** sync-1-us-east-2.sync.services.mozilla.com&lt;br /&gt;
** sync-2-us-east-2.sync.services.mozilla.com&lt;br /&gt;
*** There are many more than this now...&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production FxA/Sync:&lt;br /&gt;
** Set/Verify the following Firefox configs:&lt;br /&gt;
*** services.sync.clusterURL = (should get automatically set by the TokenServer)&lt;br /&gt;
*** services.sync.tokenServerURI = https://token.services.mozilla.com/1.0/sync/1.5&lt;br /&gt;
*** services.sync.fxaccounts.enabled=true (NEW FOR NIGHTLY FF 29 - SHOULD BE SET BY DEFAULT)&lt;br /&gt;
*** services.sync.log.appender.file.logOnError = Yes&lt;br /&gt;
*** services.sync.log.appender.file.logOnSuccess = Yes&lt;br /&gt;
*** services.sync.log.appender.file.level = Trace&lt;br /&gt;
*** identity.fxaccounts.auth.uri = https://api.accounts.firefox.com/v1&lt;br /&gt;
*** identity.fxaccounts.remote.uri = https://accounts.firefox.com/?service=sync&amp;amp;context=...&lt;br /&gt;
&lt;br /&gt;
== TokenServer+Verifier Stage Environment ==&lt;br /&gt;
* NOTE: In an upcoming deployent, the Verifier functionality will be rolled into the Tokenserver stack of services.&lt;br /&gt;
&lt;br /&gt;
* URLs&lt;br /&gt;
** TokenServer: https://token.stage.mozaws.net&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net&lt;br /&gt;
** IdP: http://mockmyid.s3-website-us-west-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
* Version:&lt;br /&gt;
 TokenServer:&lt;br /&gt;
 rpm -qa | grep -E &#039;token|browser&#039;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Shared:&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-rabbitmq&lt;br /&gt;
*** shared-rabbitmq  &lt;br /&gt;
*** shared-bastion&lt;br /&gt;
*** shared-heka&lt;br /&gt;
&lt;br /&gt;
** tokenserver app server          (1 or more instances behind a CF stack and ELB)&lt;br /&gt;
** tokenserver db                  (1 large DB instance behind RDS)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/tokenserver&lt;br /&gt;
*** esp. /data/fxa-browserid-verifier/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/fxa-browserid-verifier&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
*** esp. /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa_verifier.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/tokenserver.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/tokenserver.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** tokenserver app server:&lt;br /&gt;
*** Search for token, circus, nginx, gunicorn, python, hekad, node&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.log.*&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.error.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log		(not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log		(not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.error.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stdout.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stderr.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/puppet/modules/hekad&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** Old Dev IAM&lt;br /&gt;
*** SSH with AWS keys to the Stage bastion host in US-East-1. From there SSH directly into any instance.&lt;br /&gt;
** New Dev IAM&lt;br /&gt;
*** SSH with AWS keys to the Stage bastion host in US-East-1 or EU-West-1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
== Verifier Stage Environment ==&lt;br /&gt;
* NOTE: In an upcoming deployment, the Verifier functionality will be rolled into the Tokenserver stack of services.&lt;br /&gt;
&lt;br /&gt;
* URLs&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net&lt;br /&gt;
** IdP: http://mockmyid.s3-website-us-west-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
* Version:&lt;br /&gt;
** rpm -qa | grep verifier&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Shared:&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-rabbitmq&lt;br /&gt;
*** shared-rabbitmq  &lt;br /&gt;
*** shared-bastion&lt;br /&gt;
*** shared-heka&lt;br /&gt;
&lt;br /&gt;
** fxa-browserid_verifier or fxa-bv-stage (usually a single instance)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/fxa-browserid-verifier&lt;br /&gt;
*** esp. /data/fxa-browserid-verifier/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
*** esp. the /etc/puppet/yaml/app files&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Search for node, heka, nginx, circus&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/squid/access.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stderr.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/puppet/modules/hekad&lt;br /&gt;
** /data/hekad&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** Old Dev IAM&lt;br /&gt;
*** SSH with AWS keys to the Stage bastion host in US-East-1. From there SSH directly into any instance.&lt;br /&gt;
** New Dev IAM&lt;br /&gt;
*** SSH with AWS keys to the Stage bastion host in US-East-1 or EU-West-1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
* Quick verifications&lt;br /&gt;
 Browser: https://verifier.stage.mozaws.net/&lt;br /&gt;
 returns &amp;quot;Method Not Allowed&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $ curl https://verifier.stage.mozaws.net&lt;br /&gt;
 returns &amp;quot;Method Not Allowed&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $ curl -I https://verifier.stage.mozaws.net&lt;br /&gt;
 HTTP/1.1 405 Method Not Allowed&lt;br /&gt;
 Cache-Control: no-cache, max-age=0&lt;br /&gt;
 Content-length: 18&lt;br /&gt;
 Content-Type: text/plain&lt;br /&gt;
 Date: Wed, 23 Jul 2014 20:19:40 GMT&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
== Sync 1.5 Stage Environment ==&lt;br /&gt;
* This is a work in progress. Right now, there are only a small number of sync nodes (instances) in AWS.&lt;br /&gt;
* URLs&lt;br /&gt;
** https://sync-1-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-2-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-3-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-4-us-east-1.stage.mozaws.net&lt;br /&gt;
** and sometimes&lt;br /&gt;
** https://sync-5-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-6-us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
 Server-Syncstorage (sync node):&lt;br /&gt;
 rpm -qa | grep syncstorage&lt;br /&gt;
 Example: server-syncstorage &amp;lt;latest version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Search for sync node instances in US East: &amp;quot;stage-sync-node-X&amp;quot;&lt;br /&gt;
** Each node is a specific large instance (mixed m3 and c3)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/server-syncstorage/*&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Search for sync, mysql, circusd, hekad, nginx, memcached&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/logs/nginx/access.log&lt;br /&gt;
** /media/ephemeral0/logs/nginx/error.log&lt;br /&gt;
** /media/ephemeral0/logs/sync/sync.err&lt;br /&gt;
** /media/ephemeral0/logs/sync/sync.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/sync_1_5.stderr.log&lt;br /&gt;
** /var/log/hekad/sync_1_5.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/heka.d/sync_1_5.toml&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
&lt;br /&gt;
* Note: There is no longer a Sync 1.1 Stage environment.&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* Details on the Loads V1 cluster are available at this link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Stackdriver:&lt;br /&gt;
** Stage main: https://app.stackdriver.com&lt;br /&gt;
** https://app.stackdriver.com/groups/4388/stage-services-tag-sync15&lt;br /&gt;
** https://app.stackdriver.com/groups/4389/stage-services-tag-sync15/stage-services-sync15/fxa-verifier&lt;br /&gt;
** https://app.stackdriver.com/groups/4391/stage-services-tag-sync15/stage-services-tag-sync15/sync-storage&lt;br /&gt;
** https://app.stackdriver.com/groups/4390/stage-services-tag-sync15/stage-services-sync15/tokenserver&lt;br /&gt;
** https://app.stackdriver.com/monitoring/3827/tokenserver&lt;br /&gt;
** https://app.stackdriver.com/instances/&amp;lt;AWS instance&amp;gt;&lt;br /&gt;
** Also, make use of the Services, Groups, and Dashboards for more specific links&lt;br /&gt;
*** Example: Services &amp;gt; https://app.stackdriver.com/services/nginx&lt;br /&gt;
*** Example: Groups &amp;gt; https://app.stackdriver.com/groups/4390/stage-services-tag-sync15/stage-services-sync15/tokenserver&lt;br /&gt;
&lt;br /&gt;
* Graphite:&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Kibana&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_http_status.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_http_errors.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_mysql_slow_queries.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_app_logs.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/tokenserver_http_status.json&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
** or https://heka.shared.us-east-1.stage.mozaws.net/#health&lt;br /&gt;
** Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/TokenServerHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-ActiveDailyUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-SlowQueries&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-ResponseTime&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-HTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-FrequentUsersAggregator&lt;br /&gt;
** Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-NginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-SlowQueryFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerLocalVerifierFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-FileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-NginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerNginxFileOutput&lt;br /&gt;
** Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-FileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-SlowQueryFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerLocalVerifierFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-NginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-NginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-SlowQueries/outputs/Sync-1_5-SlowQueries.Statistics.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-ResponseTime/outputs/Sync-1_5-ResponseTime.storagemetaglobal.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Heka shared:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-FrequentUsersAggregator&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-ResponseTime&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-SlowQueries&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-ActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-HTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/TokenServerHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Kibana shared: &lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/file/default.json&lt;br /&gt;
&lt;br /&gt;
* StackDriver:&lt;br /&gt;
** Main: https://app.stackdriver.com/&lt;br /&gt;
&lt;br /&gt;
== TokenServer, Verifier, and Sync 1.5 Dev Environments ==&lt;br /&gt;
* URLs&lt;br /&gt;
** https://sync1.dev.lcip.org/&lt;br /&gt;
** https://token.dev.lcip.org/&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
 TokenServer:&lt;br /&gt;
 rpm -qa | grep token&lt;br /&gt;
 Example: tokenserver-svcops &amp;lt;latest version&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Verifier:&lt;br /&gt;
 rpm -qa | grep verifier&lt;br /&gt;
 Example: fxa-browserid-verifier-svcops &amp;lt;latest version&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Server-Syncstorage (sync node):&lt;br /&gt;
 rpm -qa | grep syncstorage&lt;br /&gt;
 Example: server-syncstorage &amp;lt;latest version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is part of the dev-lcip-org CloudFormation stack&lt;br /&gt;
*** TokenServer: Search for the fxa-tokenserver instance&lt;br /&gt;
*** SyncServer2: Search for the fxa-syncstorage instance&lt;br /&gt;
*** SyncServer1: Search for the fxa-syncstorage instance&lt;br /&gt;
*** LogServer:  Search for the fxa-logbox instance&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
* QA Access&lt;br /&gt;
** SSH with AWS keys to the various instances&lt;br /&gt;
* Firefox configs:&lt;br /&gt;
** services.sync.clusterURL = https://sync1.dev.lcip.org/ (should get automatically set by the TokenServer)&lt;br /&gt;
** services.sync.tokenServerURI = https://token.dev.lcip.org/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/sync&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/token&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TSVerifierSyncTestEnvironments&amp;diff=1028979</id>
		<title>TestEngineering/Services/TSVerifierSyncTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TSVerifierSyncTestEnvironments&amp;diff=1028979"/>
		<updated>2014-10-28T23:53:11Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* TokenServer+Verifier Stage Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* NOTE: We currently have two Verifier stacks in Stage (and probably Production): &lt;br /&gt;
** The standalone Browser_ID Verifier stack: See that Verifier Stage section below...&lt;br /&gt;
** A Tokenserver+Verifier stack: See the TokenServer Stage section below...&lt;br /&gt;
&lt;br /&gt;
== Tokenserver, Verifier, and Sync Production Environments ==&lt;br /&gt;
* TokenServer: https://token.services.mozilla.com&lt;br /&gt;
* Verifier: https://verifier.accounts.firefox.com&lt;br /&gt;
* Sync 1.5 Nodes (for now in AWS):&lt;br /&gt;
** sync-1-us-east-2.sync.services.mozilla.com&lt;br /&gt;
** sync-2-us-east-2.sync.services.mozilla.com&lt;br /&gt;
*** There are many more than this now...&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production FxA/Sync:&lt;br /&gt;
** Set/Verify the following Firefox configs:&lt;br /&gt;
*** services.sync.clusterURL = (should get automatically set by the TokenServer)&lt;br /&gt;
*** services.sync.tokenServerURI = https://token.services.mozilla.com/1.0/sync/1.5&lt;br /&gt;
*** services.sync.fxaccounts.enabled=true (NEW FOR NIGHTLY FF 29 - SHOULD BE SET BY DEFAULT)&lt;br /&gt;
*** services.sync.log.appender.file.logOnError = Yes&lt;br /&gt;
*** services.sync.log.appender.file.logOnSuccess = Yes&lt;br /&gt;
*** services.sync.log.appender.file.level = Trace&lt;br /&gt;
*** identity.fxaccounts.auth.uri = https://api.accounts.firefox.com/v1&lt;br /&gt;
*** identity.fxaccounts.remote.uri = https://accounts.firefox.com/?service=sync&amp;amp;context=...&lt;br /&gt;
&lt;br /&gt;
== TokenServer+Verifier Stage Environment ==&lt;br /&gt;
* NOTE: In an upcoming deployent, the Verifier functionality will be rolled into the Tokenserver stack of services.&lt;br /&gt;
&lt;br /&gt;
* URLs&lt;br /&gt;
** TokenServer: https://token.stage.mozaws.net&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net&lt;br /&gt;
** IdP: http://mockmyid.s3-website-us-west-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
* Version:&lt;br /&gt;
 TokenServer:&lt;br /&gt;
 rpm -qa | grep -E &#039;token|browser&#039;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Shared:&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-rabbitmq&lt;br /&gt;
*** shared-rabbitmq  &lt;br /&gt;
*** shared-bastion&lt;br /&gt;
*** shared-heka&lt;br /&gt;
&lt;br /&gt;
** tokenserver app server          (1 or more instances behind a CF stack and ELB)&lt;br /&gt;
** tokenserver db                  (1 large DB instance behind RDS)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/tokenserver&lt;br /&gt;
*** esp. /data/fxa-browserid-verifier/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/fxa-browserid-verifier&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
*** esp. /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa_verifier.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/tokenserver.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/tokenserver.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** tokenserver app server:&lt;br /&gt;
*** Search for token, circus, nginx, gunicorn, python, hekad, node&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.log.*&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.error.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log		(not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log		(not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.error.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stdout.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stderr.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/puppet/modules/hekad&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** Old Dev IAM&lt;br /&gt;
*** SSH with AWS keys to the Stage bastion host in US-East-1. From there SSH directly into any instance.&lt;br /&gt;
** New Dev IAM&lt;br /&gt;
*** SSH with AWS keys to the Stage bastion host in US-East-1 or EU-West-1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
== Verifier Stage Environment ==&lt;br /&gt;
* NOTE: In an upcoming deployment, the Verifier functionality will be rolled into the Tokenserver stack of services.&lt;br /&gt;
&lt;br /&gt;
* URLs&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net&lt;br /&gt;
** IdP: http://mockmyid.s3-website-us-west-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
* Version:&lt;br /&gt;
** rpm -qa | grep verifier&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Shared:&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-rabbitmq&lt;br /&gt;
*** shared-rabbitmq  &lt;br /&gt;
*** shared-bastion&lt;br /&gt;
*** shared-heka&lt;br /&gt;
&lt;br /&gt;
** fxa-browserid_verifier or fxa-bv-stage (usually a single instance)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/fxa-browserid-verifier&lt;br /&gt;
*** esp. /data/fxa-browserid-verifier/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
*** esp. the /etc/puppet/yaml/app files&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Search for node, heka, nginx, circus&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/squid/access.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stderr.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/puppet/modules/hekad&lt;br /&gt;
** /data/hekad&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
* Quick verifications&lt;br /&gt;
 Browser: https://verifier.stage.mozaws.net/&lt;br /&gt;
 returns &amp;quot;Method Not Allowed&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $ curl https://verifier.stage.mozaws.net&lt;br /&gt;
 returns &amp;quot;Method Not Allowed&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $ curl -I https://verifier.stage.mozaws.net&lt;br /&gt;
 HTTP/1.1 405 Method Not Allowed&lt;br /&gt;
 Cache-Control: no-cache, max-age=0&lt;br /&gt;
 Content-length: 18&lt;br /&gt;
 Content-Type: text/plain&lt;br /&gt;
 Date: Wed, 23 Jul 2014 20:19:40 GMT&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
== Sync 1.5 Stage Environment ==&lt;br /&gt;
* This is a work in progress. Right now, there are only a small number of sync nodes (instances) in AWS.&lt;br /&gt;
* URLs&lt;br /&gt;
** https://sync-1-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-2-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-3-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-4-us-east-1.stage.mozaws.net&lt;br /&gt;
** and sometimes&lt;br /&gt;
** https://sync-5-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-6-us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
 Server-Syncstorage (sync node):&lt;br /&gt;
 rpm -qa | grep syncstorage&lt;br /&gt;
 Example: server-syncstorage &amp;lt;latest version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Search for sync node instances in US East: &amp;quot;stage-sync-node-X&amp;quot;&lt;br /&gt;
** Each node is a specific large instance (mixed m3 and c3)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/server-syncstorage/*&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Search for sync, mysql, circusd, hekad, nginx, memcached&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/logs/nginx/access.log&lt;br /&gt;
** /media/ephemeral0/logs/nginx/error.log&lt;br /&gt;
** /media/ephemeral0/logs/sync/sync.err&lt;br /&gt;
** /media/ephemeral0/logs/sync/sync.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/sync_1_5.stderr.log&lt;br /&gt;
** /var/log/hekad/sync_1_5.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/heka.d/sync_1_5.toml&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
&lt;br /&gt;
* Note: There is no longer a Sync 1.1 Stage environment.&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* Details on the Loads V1 cluster are available at this link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Stackdriver:&lt;br /&gt;
** Stage main: https://app.stackdriver.com&lt;br /&gt;
** https://app.stackdriver.com/groups/4388/stage-services-tag-sync15&lt;br /&gt;
** https://app.stackdriver.com/groups/4389/stage-services-tag-sync15/stage-services-sync15/fxa-verifier&lt;br /&gt;
** https://app.stackdriver.com/groups/4391/stage-services-tag-sync15/stage-services-tag-sync15/sync-storage&lt;br /&gt;
** https://app.stackdriver.com/groups/4390/stage-services-tag-sync15/stage-services-sync15/tokenserver&lt;br /&gt;
** https://app.stackdriver.com/monitoring/3827/tokenserver&lt;br /&gt;
** https://app.stackdriver.com/instances/&amp;lt;AWS instance&amp;gt;&lt;br /&gt;
** Also, make use of the Services, Groups, and Dashboards for more specific links&lt;br /&gt;
*** Example: Services &amp;gt; https://app.stackdriver.com/services/nginx&lt;br /&gt;
*** Example: Groups &amp;gt; https://app.stackdriver.com/groups/4390/stage-services-tag-sync15/stage-services-sync15/tokenserver&lt;br /&gt;
&lt;br /&gt;
* Graphite:&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Kibana&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_http_status.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_http_errors.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_mysql_slow_queries.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_app_logs.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/tokenserver_http_status.json&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
** or https://heka.shared.us-east-1.stage.mozaws.net/#health&lt;br /&gt;
** Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/TokenServerHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-ActiveDailyUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-SlowQueries&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-ResponseTime&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-HTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-FrequentUsersAggregator&lt;br /&gt;
** Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-NginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-SlowQueryFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerLocalVerifierFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-FileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-NginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerNginxFileOutput&lt;br /&gt;
** Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-FileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-SlowQueryFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerLocalVerifierFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-NginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-NginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-SlowQueries/outputs/Sync-1_5-SlowQueries.Statistics.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-ResponseTime/outputs/Sync-1_5-ResponseTime.storagemetaglobal.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Heka shared:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-FrequentUsersAggregator&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-ResponseTime&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-SlowQueries&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-ActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-HTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/TokenServerHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Kibana shared: &lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/file/default.json&lt;br /&gt;
&lt;br /&gt;
* StackDriver:&lt;br /&gt;
** Main: https://app.stackdriver.com/&lt;br /&gt;
&lt;br /&gt;
== TokenServer, Verifier, and Sync 1.5 Dev Environments ==&lt;br /&gt;
* URLs&lt;br /&gt;
** https://sync1.dev.lcip.org/&lt;br /&gt;
** https://token.dev.lcip.org/&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
 TokenServer:&lt;br /&gt;
 rpm -qa | grep token&lt;br /&gt;
 Example: tokenserver-svcops &amp;lt;latest version&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Verifier:&lt;br /&gt;
 rpm -qa | grep verifier&lt;br /&gt;
 Example: fxa-browserid-verifier-svcops &amp;lt;latest version&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Server-Syncstorage (sync node):&lt;br /&gt;
 rpm -qa | grep syncstorage&lt;br /&gt;
 Example: server-syncstorage &amp;lt;latest version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is part of the dev-lcip-org CloudFormation stack&lt;br /&gt;
*** TokenServer: Search for the fxa-tokenserver instance&lt;br /&gt;
*** SyncServer2: Search for the fxa-syncstorage instance&lt;br /&gt;
*** SyncServer1: Search for the fxa-syncstorage instance&lt;br /&gt;
*** LogServer:  Search for the fxa-logbox instance&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
* QA Access&lt;br /&gt;
** SSH with AWS keys to the various instances&lt;br /&gt;
* Firefox configs:&lt;br /&gt;
** services.sync.clusterURL = https://sync1.dev.lcip.org/ (should get automatically set by the TokenServer)&lt;br /&gt;
** services.sync.tokenServerURI = https://token.dev.lcip.org/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/sync&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/token&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/FxATestEnvironments&amp;diff=1028976</id>
		<title>TestEngineering/Services/FxATestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/FxATestEnvironments&amp;diff=1028976"/>
		<updated>2014-10-28T23:50:54Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* FxA Stage Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NOTE: This site needs an update for all the extra Dev environments and the new environments - OAuth and Profile, etc...&lt;br /&gt;
&lt;br /&gt;
== FxA Production Environments ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Content server: https://accounts.firefox.com&lt;br /&gt;
** Auth server: https://api.accounts.firefox.com&lt;br /&gt;
** Verifier: https://verifier.accounts.firefox.com (talks to Auth Server via TokenServer)&lt;br /&gt;
** OAuth server: https://oauth.accounts.firefox.com&lt;br /&gt;
** Profile server: https://profile.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* Versions:&lt;br /&gt;
** FxA-Auth-Server: curl https://api.accounts.firefox.com/; echo &lt;br /&gt;
** FxA-Content-Server: curl https://accounts.firefox.com/ver.json; echo&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production FxA/Sync:&lt;br /&gt;
** Set/Verify the following Firefox configs:&lt;br /&gt;
*** services.sync.clusterURL = (should get automatically set by the TokenServer)&lt;br /&gt;
*** services.sync.tokenServerURI = https://token.services.mozilla.com/1.0/sync/1.5&lt;br /&gt;
*** services.sync.fxaccounts.enabled=true (NEW FOR NIGHTLY FF 29 - SHOULD BE SET BY DEFAULT)&lt;br /&gt;
*** services.sync.log.appender.file.logOnError = Yes&lt;br /&gt;
*** services.sync.log.appender.file.logOnSuccess = Yes&lt;br /&gt;
*** services.sync.log.appender.file.level = Trace&lt;br /&gt;
*** identity.fxaccounts.auth.uri = https://api.accounts.firefox.com/v1&lt;br /&gt;
*** identity.fxaccounts.remote.uri = https://accounts.firefox.com/?service=sync&amp;amp;context=...&lt;br /&gt;
&lt;br /&gt;
== FxA Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Content Server: https://accounts.stage.mozaws.net/&lt;br /&gt;
** Auth Server: https://api-accounts.stage.mozaws.net/&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net (talks to Auth Server via TokenServer)&lt;br /&gt;
** OAuth server: https://oauth.stage.mozaws.net&lt;br /&gt;
** Profile server: https://profile.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions:&lt;br /&gt;
** FxA-Auth-Server: curl https://api-accounts.stage.mozaws.net/; echo &lt;br /&gt;
** FxA-Content-Server: curl https://accounts.stage.mozaws.net/ver.json; echo&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** New FxA-shared services:&lt;br /&gt;
*** svcops-fxa-stage-heka&lt;br /&gt;
*** svcops-fxa-stage-amqp&lt;br /&gt;
*** svcops-fxa-stage-elasticsearch&lt;br /&gt;
*** svcops-fxa-stage-asg-sns-topic&lt;br /&gt;
** Other shared Stage Services:&lt;br /&gt;
*** svcops-stage-heka (combined heka+kibana behind an ELB)&lt;br /&gt;
*** svcops-stage-amqp (shared RabbitMQ cluster)&lt;br /&gt;
*** svcops-stage-elasticsearch ( Elasticsearch cluster)&lt;br /&gt;
*** svcops-stage-asg-sns-topic&lt;br /&gt;
*** svcops-stage-bastion-servers (Bastion hosts for Stage)&lt;br /&gt;
** Load Balancers:&lt;br /&gt;
*** ContentServerELB&lt;br /&gt;
*** AuthServerELB&lt;br /&gt;
*** BastionELB&lt;br /&gt;
*** BastionExternalFQDN&lt;br /&gt;
** DB Instances (RDS):&lt;br /&gt;
*** RDSInstance = fxa-rds-stage&lt;br /&gt;
** All instances: Search in AWS Console using the Env column to find &amp;quot;stage&amp;quot;&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-rabbitmq&lt;br /&gt;
*** shared-rabbitmq  &lt;br /&gt;
*** shared-bastion&lt;br /&gt;
*** shared-heka&lt;br /&gt;
*** fxa-elasticsearch&lt;br /&gt;
*** fxa-rabbitmq&lt;br /&gt;
*** fxa-heka&lt;br /&gt;
*** fxa-logbox&lt;br /&gt;
*** fxa-auth                   (2 instances, m3.large)&lt;br /&gt;
*** fxa-content_server         (1 small instance)&lt;br /&gt;
* Files&lt;br /&gt;
** /data&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
* Processes&lt;br /&gt;
** fxa-auth-server:&lt;br /&gt;
*** Look for processes owned by app, nginx, circus&lt;br /&gt;
** fxa-content-server:&lt;br /&gt;
*** Look for processes owned by node, heka, nginx, circus&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** fxa-auth-server&lt;br /&gt;
*** /media/ephemeral0/fxa-auth-server/auth_err.log.*&lt;br /&gt;
*** /media/ephemeral0/fxa-auth-server/auth_out.log&lt;br /&gt;
*** /media/ephemeral0/heka/hekad_err.log&lt;br /&gt;
*** /media/ephemeral0/heka/hekad_out.log&lt;br /&gt;
*** /media/ephemeral0/nginx/logs/access.log&lt;br /&gt;
*** /media/ephemeral0/nginx/logs/error.log&lt;br /&gt;
** fxa-content-server&lt;br /&gt;
*** /media/ephemeral0/fxa-content-server/content_err.log&lt;br /&gt;
*** /media/ephemeral0/fxa-content-server/content_out.log&lt;br /&gt;
*** /media/ephemeral0/heka/hekad_err.log&lt;br /&gt;
*** /media/ephemeral0/heka/hekad_out.log&lt;br /&gt;
*** /media/ephemeral0/nginx/access.log&lt;br /&gt;
*** /media/ephemeral0/nginx/logs/error.log&lt;br /&gt;
&lt;br /&gt;
* Log Aggregation&lt;br /&gt;
** Look at /data/hekad/hekad.toml&lt;br /&gt;
** Check here: [aggregator-output]&lt;br /&gt;
** hekad --&amp;gt; rabbitmq --&amp;gt; elasticsearch --&amp;gt; kibana (since Kibana is the UI on top of ES)&lt;br /&gt;
&lt;br /&gt;
* Stack code&lt;br /&gt;
** https://github.com/mozilla-services/svcops/tree/master/cloudformations/firefox-accounts&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/tree/master/fxa&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/tree/master/shared&lt;br /&gt;
&lt;br /&gt;
* How to find the stack instance size and number of instances&lt;br /&gt;
** https://github.com/mozilla-services/svcops/tree/master/cloudformations/firefox-accounts&lt;br /&gt;
** Environment, number of hosts, and host/instance size deployed by default (per stack/service):&lt;br /&gt;
*** Look in the json files for the CF stacks in github:&lt;br /&gt;
 fxa-auth-server.json:&lt;br /&gt;
     defaults for &amp;quot;Environment&amp;quot;, &amp;quot;AuthServerInstanceType&amp;quot;, and &amp;quot;AuthServerDesiredCapacity&amp;quot;&lt;br /&gt;
 fxa-content-server.json:&lt;br /&gt;
     defaults for &amp;quot;Environment&amp;quot;, &amp;quot;InstanceType&amp;quot;, and &amp;quot;NumServers&amp;quot;&lt;br /&gt;
 fxa-db-rds.json:&lt;br /&gt;
     defaults for &amp;quot;Environment&amp;quot; and &amp;quot;DBInstanceType&amp;quot;&lt;br /&gt;
 Compare this to what is actually live in AWS (via the Console or awsboxen)&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** Old Dev IAM&lt;br /&gt;
*** SSH with AWS keys to the Stage bastion host in US-East-1. From there SSH directly into any instance.&lt;br /&gt;
** New Dev IAM&lt;br /&gt;
*** SSH with AWS keys to the Stage bastion host in US-East-1 or EU-West-1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Stage FxA/Sync:&lt;br /&gt;
** Set/Verify the following Firefox configs:&lt;br /&gt;
*** services.sync.clusterURL = (should get automatically set by the TokenServer)&lt;br /&gt;
*** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
*** services.sync.fxaccounts.enabled=true (NEW FOR NIGHTLY FF 29 - SHOULD BE SET BY DEFAULT)&lt;br /&gt;
*** services.sync.log.appender.file.logOnError = Yes&lt;br /&gt;
*** services.sync.log.appender.file.logOnSuccess = Yes&lt;br /&gt;
*** services.sync.log.appender.file.level = Trace&lt;br /&gt;
*** identity.fxaccounts.auth.uri = https://api-accounts.stage.mozaws.net/v1&lt;br /&gt;
*** identity.fxaccounts.remote.uri = https://accounts.stage.mozaws.net/?service=sync&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Heka FxA: &lt;br /&gt;
** https://heka.fxa.us-west-2.prod.mozaws.net/&lt;br /&gt;
** https://heka.fxa.us-west-2.prod.mozaws.net/#health&lt;br /&gt;
** https://heka.fxa.us-west-2.prod.mozaws.net/#sandboxes&lt;br /&gt;
&lt;br /&gt;
* Kibana FxA:&lt;br /&gt;
** Kibana FxA: https://kibana.fxa.us-west-2.prod.mozaws.net/index.html#/dashboard/file/weblogs.json&lt;br /&gt;
** Kibana FxA errors: https://kibana.fxa.us-west-2.prod.mozaws.net/index.html#/dashboard/elasticsearch/Endpoint%20Errors&lt;br /&gt;
** Others: see the &amp;quot;load&amp;quot; folder/pull-down&lt;br /&gt;
&lt;br /&gt;
* StackDriver:&lt;br /&gt;
** Main: https://app.stackdriver.com/&lt;br /&gt;
** https://app.stackdriver.com/groups/4208/prod-persona&lt;br /&gt;
** https://app.stackdriver.com/groups/4251/production-all&lt;br /&gt;
** https://app.stackdriver.com/groups/4337/prod-fxa&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Kibana:&lt;br /&gt;
** Kibana: https://kibana.fxa.us-east-1.stage.mozaws.net/#/dashboard&lt;br /&gt;
** Kibana: https://kibana.fxa.us-east-1.stage.mozaws.net/#/dashboard/file/weblogs.json&lt;br /&gt;
&lt;br /&gt;
* Heka: &lt;br /&gt;
** https://heka.fxa.us-east-1.stage.mozaws.net/&lt;br /&gt;
** https://heka.fxa.us-east-1.stage.mozaws.net/#health&lt;br /&gt;
** https://heka.fxa.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
&lt;br /&gt;
* StackDriver:&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** https://app.stackdriver.com/groups/4393/stage-fxa&lt;br /&gt;
&lt;br /&gt;
== FxA Development Environments - partial ==&lt;br /&gt;
* NOTE: This is marked partial, because there are a number of more recent, ongoing Dev deploys for development and testing. They should get recorded here, soon...&lt;br /&gt;
&lt;br /&gt;
* QA Access&lt;br /&gt;
** SSH with AWS keys to the various instances&lt;br /&gt;
&lt;br /&gt;
* Content Server&lt;br /&gt;
** URLs&lt;br /&gt;
*** https://accounts.dev.lcip.org/&lt;br /&gt;
**** non-auto-updating environment (AWS - US East)&lt;br /&gt;
*** https://accounts-latest.dev.lcip.org/&lt;br /&gt;
**** auto-updated environment (AWS - US East)&lt;br /&gt;
** AWS&lt;br /&gt;
*** Search for the following in US East:&lt;br /&gt;
**** rfk&#039;s awsbox deployment (accounts-latest.dev.lcip.org)&lt;br /&gt;
**** rfk&#039;s awsbox deployment (accounts.dev.lcip.org)&lt;br /&gt;
** Versions&lt;br /&gt;
*** https://accounts-latest.dev.lcip.org/ver.txt&lt;br /&gt;
*** https://api-accounts-latest.dev.lcip.org/ver.txt&lt;br /&gt;
*** https://accounts.dev.lcip.org/ver.txt&lt;br /&gt;
*** https://api-accounts.dev.lcip.org/ver.txt&lt;br /&gt;
** Files&lt;br /&gt;
*** /home/app&lt;br /&gt;
*** /home/proxy&lt;br /&gt;
** Processes&lt;br /&gt;
*** Look at any process owned by root, mysql, app, proxy&lt;br /&gt;
** Logs&lt;br /&gt;
*** /var/log/nginx/access.log and error.log&lt;br /&gt;
*** /home/app/var/log/browserid-certifier.js.log&lt;br /&gt;
*** /home/app/var/log/firefox_account_bridge.js.log&lt;br /&gt;
&lt;br /&gt;
* Auth Server&lt;br /&gt;
** URLs&lt;br /&gt;
*** https://api-accounts.dev.lcip.org&lt;br /&gt;
*** https://api-accounts-latest.dev.lcip.org&lt;br /&gt;
** AWS&lt;br /&gt;
*** Search for the following in US East:&lt;br /&gt;
**** rfk&#039;s awsbox deployment (api-accounts-latest.dev.lcip.org)&lt;br /&gt;
**** rfk&#039;s awsbox deployment (api-accounts.dev.lcip.org)&lt;br /&gt;
** Versions&lt;br /&gt;
*** https://api-accounts.dev.lcip.org/ver.txt&lt;br /&gt;
*** https://api-accounts-latest.dev.lcip.org/ver.txt&lt;br /&gt;
** Files&lt;br /&gt;
*** /home/app&lt;br /&gt;
** Processes&lt;br /&gt;
** Search for any process owned by app, root, mysql, proxy&lt;br /&gt;
** Logs&lt;br /&gt;
*** /home/app/hekad/*.log&lt;br /&gt;
*** /home/app/var/log/*.log&lt;br /&gt;
*** /home/proxy/var/log/nginx&lt;br /&gt;
&lt;br /&gt;
* Log Aggregation&lt;br /&gt;
** http://logs.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Mail&lt;br /&gt;
** https://restmail.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** http://logs.dev.lcip.org/kibana/index.html#/dashboard/file/weblogs.json&lt;br /&gt;
&lt;br /&gt;
* Default Firefox configs for Nightly:&lt;br /&gt;
** services.sync.clusterURL = http://db1.oldsync.dev.lcip.org/ (should get automatically set by the TokenServer)&lt;br /&gt;
** services.sync.tokenServerURI = http://auth.oldsync.dev.lcip.org/1.0/sync/1.1&lt;br /&gt;
** firefox.accounts.remoteUrl = https://accounts.dev.lcip.org/?service=sync&lt;br /&gt;
*** identity.fxaccounts.enabled=true (NO LONGER NEEDED, BUT STILL CAN BE DEFINED)&lt;br /&gt;
*** services.sync.fxaccounts.enabled=true (NEW FOR NIGHTLY FF 29 - SHOULD BE SET BY DEFAULT)&lt;br /&gt;
** services.sync.log.appender.file.logOnError = Yes&lt;br /&gt;
** services.sync.log.appender.file.logOnSuccess = Yes&lt;br /&gt;
** services.sync.log.appender.file.level = Trace&lt;br /&gt;
** identity.fxaccounts.auth.uri = https://api-accounts.dev.lcip.org/v1 &lt;br /&gt;
** And to hit the TokenServer/Sync 1.5 Dev services, change the following:&lt;br /&gt;
*** services.sync.clusterURL = https://sync1.dev.lcip.org/ (should get automatically set by the TokenServer)&lt;br /&gt;
*** services.sync.tokenServerURI = https://token.dev.lcip.org/1.0/sync/1.5&lt;br /&gt;
** And to hit the TokenServer/Sync 1.5 Stage services, change the following:&lt;br /&gt;
*** services.sync.clusterURL = https://sync-X-us-east-1.stage.mozaws.net/ (should get automatically set by the TokenServer)&lt;br /&gt;
*** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
** And to hit the TokenServer/Sync 1.5 Prod services, change the following:&lt;br /&gt;
*** services.sync.clusterURL = https://sync-X-us-east-2.sync.services.mozilla.com/ (should get automatically set by the TokenServer)&lt;br /&gt;
*** services.sync.tokenServerURI = https://token.services.mozilla.com/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Other Dev Deployments:&lt;br /&gt;
** AWS: api-accounts-legacy.dev.lcip.org&lt;br /&gt;
** AWS: accounts-legacy.dev.lcip.org&lt;br /&gt;
** AWS: api-accounts-onepw.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
== OAuth Dev Environment ==&lt;br /&gt;
* NOTE: TBD&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
** and https://github.com/mozilla-services/puppet-config/tree/master/fxa&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/firefox-accounts&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028974</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028974"/>
		<updated>2014-10-28T23:46:30Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* QA Access via a Bastion Host */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 now returns all of this info:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
      bunch of loop-client specific info&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** Sentry: http://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for loop-client-*&lt;br /&gt;
** ELB: loop-client-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 or 6.5&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
*** default.access.log&lt;br /&gt;
*** default.error.log&lt;br /&gt;
*** loop-client.access.log&lt;br /&gt;
*** loop-client.error.log&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 Check the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
  serverUrl: &#039;https://loop.stage.mozaws.net&#039;,&lt;br /&gt;
  and a bunch of other loop-client specific stuff&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* Version string&lt;br /&gt;
** /data/msisdn-gateway/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** http://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* Old Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
* New Dev IAM&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US-East-1 or EU-West-1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** https://app.stackdriver.com/groups/11042/loop-server/stage-loop&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/groups/11044/loop-server/prod-loop&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1028524</id>
		<title>TestEngineering/Services/LoopServerLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1028524"/>
		<updated>2014-10-28T00:10:27Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Monitoring Loop Stage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 Check https://call.stage.mozaws.net/config.js&lt;br /&gt;
 Should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
 and&lt;br /&gt;
 WIP from the client team: end to end tests&lt;br /&gt;
 Also:&lt;br /&gt;
 https://call.stage.mozaws.net&lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd msisdn-gateway&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Quick Verification of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment for after each Production deployment.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Then run a few &#039;make test&#039; commands from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://loop.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party server&lt;br /&gt;
 &lt;br /&gt;
 Then perform actual loop testing via desktop (Aurora/Nightly so far) and FxOS (2.1)&lt;br /&gt;
 Verify that requests and strings point to Production environments&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 should return &amp;quot;Welcome to the Loop web client.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/config.js&lt;br /&gt;
 should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 should return the version and build string info&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com&lt;br /&gt;
 curl -I https://call.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Quick end-to-end tests:&lt;br /&gt;
 Desktop: browser to browser&lt;br /&gt;
 Desktop to FxOS&lt;br /&gt;
 FxOS to Desktop&lt;br /&gt;
 Two FxOS devices&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
 Or&lt;br /&gt;
 Run a single &#039;make test&#039; command from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://msisdn.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party, so limit the check to a single run.&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Installing Loop-Server and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 git clone https://github.com/mozilla-services/loop-server.git&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 Note: You may want to install a specific branch for testing vs defaulting to Master&lt;br /&gt;
 npm install&lt;br /&gt;
 ulimit -S -n 2048&lt;br /&gt;
 npm test *&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make build&lt;br /&gt;
 make test&lt;br /&gt;
 &lt;br /&gt;
 Coverage report can be found here:&lt;br /&gt;
 /loop-server/coverage/lcov-report/index.html&lt;br /&gt;
 &lt;br /&gt;
 * This step requires the redis server to be installed and running:&lt;br /&gt;
 Mac:&lt;br /&gt;
 brew install redis&lt;br /&gt;
 redis-server /usr/local/etc/redis.conf&lt;br /&gt;
 &lt;br /&gt;
 Ubuntu Linux:&lt;br /&gt;
 sudo apt-get install redis-server&lt;br /&gt;
 sudo /usr/bin/redis-server /etc/redis/redis.conf&lt;br /&gt;
 sudo tail -f /var/log/redis/redis-server.log&lt;br /&gt;
 &lt;br /&gt;
 RHEL Linux:&lt;br /&gt;
 Install redis from here: http://download.redis.io/releases&lt;br /&gt;
 then&lt;br /&gt;
 /usr/local/bin/redis-server /home/ec2-user/redis-2.8.9/redis.conf&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the Loop-Server.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Loop-Server in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ cd loop-server/loadtests&lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Loop-Server in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing MSISDN-Gateway and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
** Install gmp, gmp-dev or gmp-devel&lt;br /&gt;
** Install ruby (very latest), ruby-dev or ruby-devel&lt;br /&gt;
** Install gem (required for fake_dynamo)&lt;br /&gt;
** Verify that gem is in your path&lt;br /&gt;
** Install redis-server to run the unit tests&lt;br /&gt;
&lt;br /&gt;
* To install gmp&lt;br /&gt;
 sudo yum -y install gmp, gmp-devel&lt;br /&gt;
 or for Ubuntu&lt;br /&gt;
 $ wget https://ftp.gnu.org/gnu/gmp/gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ tar xvjf gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ cd gmp-6.0.0&lt;br /&gt;
 $ ./configure --prefix=/usr&lt;br /&gt;
 $ make&lt;br /&gt;
 $ make check&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
* To install ruby:&lt;br /&gt;
 sudo yum -y install ruby, ruby-devel&lt;br /&gt;
 or&lt;br /&gt;
 sudo apt-get install ruby, ruby-dev&lt;br /&gt;
 &lt;br /&gt;
 If this does not get you 1.9.3 or newer, then install manually:&lt;br /&gt;
 Example:&lt;br /&gt;
     $ wget http://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p547.tar.gz&lt;br /&gt;
     $ ./configure --prefix=/usr&lt;br /&gt;
     $ make&lt;br /&gt;
     $ sudo make install&lt;br /&gt;
     (because for rhel, the default ruby version is 1.8.x.)&lt;br /&gt;
 REF:&lt;br /&gt;
 Main: https://www.ruby-lang.org/en/downloads/&lt;br /&gt;
 Dev Tools: http://rubyinstaller.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
* To install gem:&lt;br /&gt;
 Grab rubygems from here: http://rubygems.org/pages/download&lt;br /&gt;
 cd to rubygems directory&lt;br /&gt;
 $ sudo ruby setup.rb&lt;br /&gt;
&lt;br /&gt;
* To install fake_dynamo:&lt;br /&gt;
 You should not have to install fake_dynamo since it is now part of the repo installer.&lt;br /&gt;
 But if you do:&lt;br /&gt;
 $ sudo gem install fake_dynamo&lt;br /&gt;
 REF: https://github.com/ananthakumaran/fake_dynamo&lt;br /&gt;
&lt;br /&gt;
* Install the msisdn-gateway repo:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/msisdn-gateway.git&lt;br /&gt;
 $ cd msisdn-gateway&lt;br /&gt;
 Note: You may want to install a specific branch for testing vs defaulting to Master&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
 (There is a bug open about the requirement to install with &#039;sudo&#039;)&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with MSISDN-Gateway.&lt;br /&gt;
&lt;br /&gt;
* Unit testing&lt;br /&gt;
 Get redis-server installed&lt;br /&gt;
 Start the server in a separate terminal or in the background with logging active&lt;br /&gt;
 $ make test&lt;br /&gt;
 The coverage report is here: msisdn-gateway/coverage/lcov-report/index.html&lt;br /&gt;
&lt;br /&gt;
* Bugs:&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036158&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036174&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048451&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048456&lt;br /&gt;
&lt;br /&gt;
== Running the load test against MSISDN-Gateway in Stage ==&lt;br /&gt;
* Building the load tests&lt;br /&gt;
 $ cd loadtests&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* To load test the Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the MSISDN-Gateway ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json &lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users &lt;br /&gt;
&lt;br /&gt;
** For make bench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test &lt;br /&gt;
&lt;br /&gt;
** For make megabench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Broker to use for testing (leaves as defined for now - this is broker in the Loads Cluster)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel)&lt;br /&gt;
&lt;br /&gt;
* Loop-Server load test code&lt;br /&gt;
** The Loop-Server load test can not currently be configured in the code&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway load test code&lt;br /&gt;
** The MSISDN-Gateway load test can be configured in the code - see the following lines: &lt;br /&gt;
** Test server URL: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L15&lt;br /&gt;
** Error percentages: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
&lt;br /&gt;
* General REFs: &lt;br /&gt;
** https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* Loop-Server&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Custom Metrics&lt;br /&gt;
** Opened web sockets&lt;br /&gt;
** Total web sockets&lt;br /&gt;
** Bytes/websockets&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway Custom Metrics&lt;br /&gt;
** mt-flow&lt;br /&gt;
** ask-for-certificate&lt;br /&gt;
** try-wrong-code&lt;br /&gt;
** try-right-code&lt;br /&gt;
** momt-flow&lt;br /&gt;
** omxen-message-collision&lt;br /&gt;
** register&lt;br /&gt;
** unregister&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for Loop-Server (per server)&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/loop_err.log&lt;br /&gt;
** /var/log/loop_out.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /var/log/nginx/access.log&lt;br /&gt;
** /var/log/nginx/error.log &lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for MSISDN-Gateway (per server)&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable Loop-Server errors:&lt;br /&gt;
 hekad loop.stderr.log&lt;br /&gt;
 The following are acceptable:&lt;br /&gt;
 Decoder &#039;LoopServer-LoopServerDecoder&#039; error: Failed parsing&lt;br /&gt;
 Plugin &#039;AggregatorOutput&#039; error: writing to heka.shared....&lt;br /&gt;
 &lt;br /&gt;
 nginx logs:&lt;br /&gt;
 The 200s (good stuff) and 101s (websockets) are acceptable. &lt;br /&gt;
 The 499s are an artifact of the current load testing tool (V1).&lt;br /&gt;
 You should only see them at the end of the load test.&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 Any percentage of 405s, 502s, or 503s is not acceptable.&lt;br /&gt;
 &lt;br /&gt;
 Application logs:&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 See the loop_server.out.log file.&lt;br /&gt;
 &lt;br /&gt;
 /var/log/loop_err.log&lt;br /&gt;
 The following are acceptable: connect: res.on(&amp;quot;header&amp;quot;): use on-headers module directly&lt;br /&gt;
 &lt;br /&gt;
 In the Loads Cluster dashboard, watch for the following errors/failures:&lt;br /&gt;
 string indices must be integers&lt;br /&gt;
 OR&lt;br /&gt;
 No JSON object could be decoded&lt;br /&gt;
 OR&lt;br /&gt;
 &#039;hawk-session-token&#039;&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable MSISDN-Gateway errors:&lt;br /&gt;
 The updated load test does generate a certain percentage of errors:&lt;br /&gt;
 https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
 So, expect to see a predefined percentage of 204s and 400s, along with the usual 200s in the nginx access logs.&lt;br /&gt;
 The msisdn-gateway app logs should be clean with just msisdn and test data.&lt;br /&gt;
&lt;br /&gt;
== Monitoring Loop Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard: &lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: &lt;br /&gt;
** https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
** https://app.stackdriver.com/groups/11042/loop-server/stage-loop&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Loop Server: Check the following repos:&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla-services/docs/issues&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/issues&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** and in Bugzilla for non-Verified bugs: http://mzl.la/1qPxizw&lt;br /&gt;
&lt;br /&gt;
* OPs and Infra&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Repositories and Documentation&lt;br /&gt;
** Check here: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#References&lt;br /&gt;
&lt;br /&gt;
* The QA Test Environments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments&lt;br /&gt;
&lt;br /&gt;
* Test Plans and other QA&lt;br /&gt;
** https://docs.google.com/a/mozilla.com/document/d/1xYZijHnJ1JeJhONm2AYvxSnD2tWztC16WGFyD5U_d6g/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop/Try_Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA#Server&lt;br /&gt;
** https://intranet.mozilla.org/QA/Loop/MVP&lt;br /&gt;
&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028523</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028523"/>
		<updated>2014-10-28T00:10:03Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Monitoring the Stage Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 now returns all of this info:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
      bunch of loop-client specific info&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** Sentry: http://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for loop-client-*&lt;br /&gt;
** ELB: loop-client-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 or 6.5&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
*** default.access.log&lt;br /&gt;
*** default.error.log&lt;br /&gt;
*** loop-client.access.log&lt;br /&gt;
*** loop-client.error.log&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 Check the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
  serverUrl: &#039;https://loop.stage.mozaws.net&#039;,&lt;br /&gt;
  and a bunch of other loop-client specific stuff&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* Version string&lt;br /&gt;
** /data/msisdn-gateway/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** http://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** https://app.stackdriver.com/groups/11042/loop-server/stage-loop&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/groups/11044/loop-server/prod-loop&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028522</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028522"/>
		<updated>2014-10-28T00:09:40Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Monitoring the Production Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 now returns all of this info:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
      bunch of loop-client specific info&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** Sentry: http://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for loop-client-*&lt;br /&gt;
** ELB: loop-client-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 or 6.5&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
*** default.access.log&lt;br /&gt;
*** default.error.log&lt;br /&gt;
*** loop-client.access.log&lt;br /&gt;
*** loop-client.error.log&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 Check the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
  serverUrl: &#039;https://loop.stage.mozaws.net&#039;,&lt;br /&gt;
  and a bunch of other loop-client specific stuff&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* Version string&lt;br /&gt;
** /data/msisdn-gateway/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** http://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** None at this time. See https://bugzilla.mozilla.org/show_bug.cgi?id=1063134&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/groups/11044/loop-server/prod-loop&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028457</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028457"/>
		<updated>2014-10-27T18:23:13Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Loop Client Stage Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 now returns all of this info:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
      bunch of loop-client specific info&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** Sentry: http://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for loop-client-*&lt;br /&gt;
** ELB: loop-client-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 or 6.5&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /var/log/hekad/loop-client.stderr.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
*** default.access.log&lt;br /&gt;
*** default.error.log&lt;br /&gt;
*** loop-client.access.log&lt;br /&gt;
*** loop-client.error.log&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 Check the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
  serverUrl: &#039;https://loop.stage.mozaws.net&#039;,&lt;br /&gt;
  and a bunch of other loop-client specific stuff&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* Version string&lt;br /&gt;
** /data/msisdn-gateway/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** http://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** None at this time. See https://bugzilla.mozilla.org/show_bug.cgi?id=1063134&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028454</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1028454"/>
		<updated>2014-10-27T18:18:17Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Loop Server Production Environments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Firefox Hello web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 now returns all of this info:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {&lt;br /&gt;
      bunch of loop-client specific info&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** Sentry: http://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for loop-client-*&lt;br /&gt;
** ELB: loop-client-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* Version string&lt;br /&gt;
** /data/msisdn-gateway/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** http://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** None at this time. See https://bugzilla.mozilla.org/show_bug.cgi?id=1063134&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1025911</id>
		<title>TestEngineering/Services/LoopServerLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1025911"/>
		<updated>2014-10-16T18:24:04Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Installing MSISDN-Gateway and the Loads tool on Localhost or AWS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 Check https://call.stage.mozaws.net/config.js&lt;br /&gt;
 Should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
 and&lt;br /&gt;
 WIP from the client team: end to end tests&lt;br /&gt;
 Also:&lt;br /&gt;
 https://call.stage.mozaws.net&lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd msisdn-gateway&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Quick Verification of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment for after each Production deployment.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Then run a few &#039;make test&#039; commands from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://loop.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party server&lt;br /&gt;
 &lt;br /&gt;
 Then perform actual loop testing via desktop (Aurora/Nightly so far) and FxOS (2.1)&lt;br /&gt;
 Verify that requests and strings point to Production environments&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 should return &amp;quot;Welcome to the Loop web client.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/config.js&lt;br /&gt;
 should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 should return the version and build string info&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com&lt;br /&gt;
 curl -I https://call.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Quick end-to-end tests:&lt;br /&gt;
 Desktop: browser to browser&lt;br /&gt;
 Desktop to FxOS&lt;br /&gt;
 FxOS to Desktop&lt;br /&gt;
 Two FxOS devices&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
 Or&lt;br /&gt;
 Run a single &#039;make test&#039; command from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://msisdn.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party, so limit the check to a single run.&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Installing Loop-Server and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 git clone https://github.com/mozilla-services/loop-server.git&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 Note: You may want to install a specific branch for testing vs defaulting to Master&lt;br /&gt;
 npm install&lt;br /&gt;
 ulimit -S -n 2048&lt;br /&gt;
 npm test *&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make build&lt;br /&gt;
 make test&lt;br /&gt;
 &lt;br /&gt;
 Coverage report can be found here:&lt;br /&gt;
 /loop-server/coverage/lcov-report/index.html&lt;br /&gt;
 &lt;br /&gt;
 * This step requires the redis server to be installed and running:&lt;br /&gt;
 Mac:&lt;br /&gt;
 brew install redis&lt;br /&gt;
 redis-server /usr/local/etc/redis.conf&lt;br /&gt;
 &lt;br /&gt;
 Ubuntu Linux:&lt;br /&gt;
 sudo apt-get install redis-server&lt;br /&gt;
 sudo /usr/bin/redis-server /etc/redis/redis.conf&lt;br /&gt;
 sudo tail -f /var/log/redis/redis-server.log&lt;br /&gt;
 &lt;br /&gt;
 RHEL Linux:&lt;br /&gt;
 Install redis from here: http://download.redis.io/releases&lt;br /&gt;
 then&lt;br /&gt;
 /usr/local/bin/redis-server /home/ec2-user/redis-2.8.9/redis.conf&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the Loop-Server.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Loop-Server in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ cd loop-server/loadtests&lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Loop-Server in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing MSISDN-Gateway and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
** Install gmp, gmp-dev or gmp-devel&lt;br /&gt;
** Install ruby (very latest), ruby-dev or ruby-devel&lt;br /&gt;
** Install gem (required for fake_dynamo)&lt;br /&gt;
** Verify that gem is in your path&lt;br /&gt;
** Install redis-server to run the unit tests&lt;br /&gt;
&lt;br /&gt;
* To install gmp&lt;br /&gt;
 sudo yum -y install gmp, gmp-devel&lt;br /&gt;
 or for Ubuntu&lt;br /&gt;
 $ wget https://ftp.gnu.org/gnu/gmp/gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ tar xvjf gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ cd gmp-6.0.0&lt;br /&gt;
 $ ./configure --prefix=/usr&lt;br /&gt;
 $ make&lt;br /&gt;
 $ make check&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
* To install ruby:&lt;br /&gt;
 sudo yum -y install ruby, ruby-devel&lt;br /&gt;
 or&lt;br /&gt;
 sudo apt-get install ruby, ruby-dev&lt;br /&gt;
 &lt;br /&gt;
 If this does not get you 1.9.3 or newer, then install manually:&lt;br /&gt;
 Example:&lt;br /&gt;
     $ wget http://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p547.tar.gz&lt;br /&gt;
     $ ./configure --prefix=/usr&lt;br /&gt;
     $ make&lt;br /&gt;
     $ sudo make install&lt;br /&gt;
     (because for rhel, the default ruby version is 1.8.x.)&lt;br /&gt;
 REF:&lt;br /&gt;
 Main: https://www.ruby-lang.org/en/downloads/&lt;br /&gt;
 Dev Tools: http://rubyinstaller.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
* To install gem:&lt;br /&gt;
 Grab rubygems from here: http://rubygems.org/pages/download&lt;br /&gt;
 cd to rubygems directory&lt;br /&gt;
 $ sudo ruby setup.rb&lt;br /&gt;
&lt;br /&gt;
* To install fake_dynamo:&lt;br /&gt;
 You should not have to install fake_dynamo since it is now part of the repo installer.&lt;br /&gt;
 But if you do:&lt;br /&gt;
 $ sudo gem install fake_dynamo&lt;br /&gt;
 REF: https://github.com/ananthakumaran/fake_dynamo&lt;br /&gt;
&lt;br /&gt;
* Install the msisdn-gateway repo:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/msisdn-gateway.git&lt;br /&gt;
 $ cd msisdn-gateway&lt;br /&gt;
 Note: You may want to install a specific branch for testing vs defaulting to Master&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
 (There is a bug open about the requirement to install with &#039;sudo&#039;)&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with MSISDN-Gateway.&lt;br /&gt;
&lt;br /&gt;
* Unit testing&lt;br /&gt;
 Get redis-server installed&lt;br /&gt;
 Start the server in a separate terminal or in the background with logging active&lt;br /&gt;
 $ make test&lt;br /&gt;
 The coverage report is here: msisdn-gateway/coverage/lcov-report/index.html&lt;br /&gt;
&lt;br /&gt;
* Bugs:&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036158&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036174&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048451&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048456&lt;br /&gt;
&lt;br /&gt;
== Running the load test against MSISDN-Gateway in Stage ==&lt;br /&gt;
* Building the load tests&lt;br /&gt;
 $ cd loadtests&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* To load test the Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the MSISDN-Gateway ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json &lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users &lt;br /&gt;
&lt;br /&gt;
** For make bench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test &lt;br /&gt;
&lt;br /&gt;
** For make megabench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Broker to use for testing (leaves as defined for now - this is broker in the Loads Cluster)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel)&lt;br /&gt;
&lt;br /&gt;
* Loop-Server load test code&lt;br /&gt;
** The Loop-Server load test can not currently be configured in the code&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway load test code&lt;br /&gt;
** The MSISDN-Gateway load test can be configured in the code - see the following lines: &lt;br /&gt;
** Test server URL: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L15&lt;br /&gt;
** Error percentages: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
&lt;br /&gt;
* General REFs: &lt;br /&gt;
** https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* Loop-Server&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Custom Metrics&lt;br /&gt;
** Opened web sockets&lt;br /&gt;
** Total web sockets&lt;br /&gt;
** Bytes/websockets&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway Custom Metrics&lt;br /&gt;
** mt-flow&lt;br /&gt;
** ask-for-certificate&lt;br /&gt;
** try-wrong-code&lt;br /&gt;
** try-right-code&lt;br /&gt;
** momt-flow&lt;br /&gt;
** omxen-message-collision&lt;br /&gt;
** register&lt;br /&gt;
** unregister&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for Loop-Server (per server)&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/loop_err.log&lt;br /&gt;
** /var/log/loop_out.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /var/log/nginx/access.log&lt;br /&gt;
** /var/log/nginx/error.log &lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for MSISDN-Gateway (per server)&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable Loop-Server errors:&lt;br /&gt;
 hekad loop.stderr.log&lt;br /&gt;
 The following are acceptable:&lt;br /&gt;
 Decoder &#039;LoopServer-LoopServerDecoder&#039; error: Failed parsing&lt;br /&gt;
 Plugin &#039;AggregatorOutput&#039; error: writing to heka.shared....&lt;br /&gt;
 &lt;br /&gt;
 nginx logs:&lt;br /&gt;
 The 200s (good stuff) and 101s (websockets) are acceptable. &lt;br /&gt;
 The 499s are an artifact of the current load testing tool (V1).&lt;br /&gt;
 You should only see them at the end of the load test.&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 Any percentage of 405s, 502s, or 503s is not acceptable.&lt;br /&gt;
 &lt;br /&gt;
 Application logs:&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 See the loop_server.out.log file.&lt;br /&gt;
 &lt;br /&gt;
 /var/log/loop_err.log&lt;br /&gt;
 The following are acceptable: connect: res.on(&amp;quot;header&amp;quot;): use on-headers module directly&lt;br /&gt;
 &lt;br /&gt;
 In the Loads Cluster dashboard, watch for the following errors/failures:&lt;br /&gt;
 string indices must be integers&lt;br /&gt;
 OR&lt;br /&gt;
 No JSON object could be decoded&lt;br /&gt;
 OR&lt;br /&gt;
 &#039;hawk-session-token&#039;&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable MSISDN-Gateway errors:&lt;br /&gt;
 The updated load test does generate a certain percentage of errors:&lt;br /&gt;
 https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
 So, expect to see a predefined percentage of 204s and 400s, along with the usual 200s in the nginx access logs.&lt;br /&gt;
 The msisdn-gateway app logs should be clean with just msisdn and test data.&lt;br /&gt;
&lt;br /&gt;
== Monitoring Loop Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard: &lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Loop Server: Check the following repos:&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla-services/docs/issues&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/issues&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** and in Bugzilla for non-Verified bugs: http://mzl.la/1qPxizw&lt;br /&gt;
&lt;br /&gt;
* OPs and Infra&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Repositories and Documentation&lt;br /&gt;
** Check here: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#References&lt;br /&gt;
&lt;br /&gt;
* The QA Test Environments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments&lt;br /&gt;
&lt;br /&gt;
* Test Plans and other QA&lt;br /&gt;
** https://docs.google.com/a/mozilla.com/document/d/1xYZijHnJ1JeJhONm2AYvxSnD2tWztC16WGFyD5U_d6g/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop/Try_Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA#Server&lt;br /&gt;
** https://intranet.mozilla.org/QA/Loop/MVP&lt;br /&gt;
&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1025910</id>
		<title>TestEngineering/Services/LoopServerLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1025910"/>
		<updated>2014-10-16T18:23:16Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Installing Loop-Server and the Loads tool on Localhost or AWS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 Check https://call.stage.mozaws.net/config.js&lt;br /&gt;
 Should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
 and&lt;br /&gt;
 WIP from the client team: end to end tests&lt;br /&gt;
 Also:&lt;br /&gt;
 https://call.stage.mozaws.net&lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd msisdn-gateway&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Quick Verification of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment for after each Production deployment.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Then run a few &#039;make test&#039; commands from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://loop.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party server&lt;br /&gt;
 &lt;br /&gt;
 Then perform actual loop testing via desktop (Aurora/Nightly so far) and FxOS (2.1)&lt;br /&gt;
 Verify that requests and strings point to Production environments&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 should return &amp;quot;Welcome to the Loop web client.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/config.js&lt;br /&gt;
 should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 should return the version and build string info&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com&lt;br /&gt;
 curl -I https://call.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Quick end-to-end tests:&lt;br /&gt;
 Desktop: browser to browser&lt;br /&gt;
 Desktop to FxOS&lt;br /&gt;
 FxOS to Desktop&lt;br /&gt;
 Two FxOS devices&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
 Or&lt;br /&gt;
 Run a single &#039;make test&#039; command from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://msisdn.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party, so limit the check to a single run.&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Installing Loop-Server and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 git clone https://github.com/mozilla-services/loop-server.git&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 Note: You may want to install a specific branch for testing vs defaulting to Master&lt;br /&gt;
 npm install&lt;br /&gt;
 ulimit -S -n 2048&lt;br /&gt;
 npm test *&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make build&lt;br /&gt;
 make test&lt;br /&gt;
 &lt;br /&gt;
 Coverage report can be found here:&lt;br /&gt;
 /loop-server/coverage/lcov-report/index.html&lt;br /&gt;
 &lt;br /&gt;
 * This step requires the redis server to be installed and running:&lt;br /&gt;
 Mac:&lt;br /&gt;
 brew install redis&lt;br /&gt;
 redis-server /usr/local/etc/redis.conf&lt;br /&gt;
 &lt;br /&gt;
 Ubuntu Linux:&lt;br /&gt;
 sudo apt-get install redis-server&lt;br /&gt;
 sudo /usr/bin/redis-server /etc/redis/redis.conf&lt;br /&gt;
 sudo tail -f /var/log/redis/redis-server.log&lt;br /&gt;
 &lt;br /&gt;
 RHEL Linux:&lt;br /&gt;
 Install redis from here: http://download.redis.io/releases&lt;br /&gt;
 then&lt;br /&gt;
 /usr/local/bin/redis-server /home/ec2-user/redis-2.8.9/redis.conf&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the Loop-Server.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Loop-Server in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ cd loop-server/loadtests&lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Loop-Server in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing MSISDN-Gateway and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
** Install gmp, gmp-dev or gmp-devel&lt;br /&gt;
** Install ruby (very latest), ruby-dev or ruby-devel&lt;br /&gt;
** Install gem (required for fake_dynamo)&lt;br /&gt;
** Verify that gem is in your path&lt;br /&gt;
** Install redis-server to run the unit tests&lt;br /&gt;
&lt;br /&gt;
* To install gmp&lt;br /&gt;
 sudo yum -y install gmp, gmp-devel&lt;br /&gt;
 or for Ubuntu&lt;br /&gt;
 $ wget https://ftp.gnu.org/gnu/gmp/gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ tar xvjf gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ cd gmp-6.0.0&lt;br /&gt;
 $ ./configure --prefix=/usr&lt;br /&gt;
 $ make&lt;br /&gt;
 $ make check&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
* To install ruby:&lt;br /&gt;
 sudo yum -y install ruby, ruby-devel&lt;br /&gt;
 or&lt;br /&gt;
 sudo apt-get install ruby, ruby-dev&lt;br /&gt;
 &lt;br /&gt;
 If this does not get you 1.9.3 or newer, then install manually:&lt;br /&gt;
 Example:&lt;br /&gt;
     $ wget http://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p547.tar.gz&lt;br /&gt;
     $ ./configure --prefix=/usr&lt;br /&gt;
     $ make&lt;br /&gt;
     $ sudo make install&lt;br /&gt;
     (because for rhel, the default ruby version is 1.8.x.)&lt;br /&gt;
 REF:&lt;br /&gt;
 Main: https://www.ruby-lang.org/en/downloads/&lt;br /&gt;
 Dev Tools: http://rubyinstaller.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
* To install gem:&lt;br /&gt;
 Grab rubygems from here: http://rubygems.org/pages/download&lt;br /&gt;
 cd to rubygems directory&lt;br /&gt;
 $ sudo ruby setup.rb&lt;br /&gt;
&lt;br /&gt;
* To install fake_dynamo:&lt;br /&gt;
 You should not have to install fake_dynamo since it is now part of the repo installer.&lt;br /&gt;
 But if you do:&lt;br /&gt;
 $ sudo gem install fake_dynamo&lt;br /&gt;
 REF: https://github.com/ananthakumaran/fake_dynamo&lt;br /&gt;
&lt;br /&gt;
* Install the msisdn-gateway repo:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/msisdn-gateway.git&lt;br /&gt;
 $ cd msisdn-gateway&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
 (There is a bug open about the requirement to install with &#039;sudo&#039;)&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with MSISDN-Gateway.&lt;br /&gt;
&lt;br /&gt;
* Unit testing&lt;br /&gt;
 Get redis-server installed&lt;br /&gt;
 Start the server in a separate terminal or in the background with logging active&lt;br /&gt;
 $ make test&lt;br /&gt;
 The coverage report is here: msisdn-gateway/coverage/lcov-report/index.html&lt;br /&gt;
&lt;br /&gt;
* Bugs:&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036158&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036174&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048451&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048456&lt;br /&gt;
&lt;br /&gt;
== Running the load test against MSISDN-Gateway in Stage ==&lt;br /&gt;
* Building the load tests&lt;br /&gt;
 $ cd loadtests&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* To load test the Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the MSISDN-Gateway ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json &lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users &lt;br /&gt;
&lt;br /&gt;
** For make bench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test &lt;br /&gt;
&lt;br /&gt;
** For make megabench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Broker to use for testing (leaves as defined for now - this is broker in the Loads Cluster)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel)&lt;br /&gt;
&lt;br /&gt;
* Loop-Server load test code&lt;br /&gt;
** The Loop-Server load test can not currently be configured in the code&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway load test code&lt;br /&gt;
** The MSISDN-Gateway load test can be configured in the code - see the following lines: &lt;br /&gt;
** Test server URL: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L15&lt;br /&gt;
** Error percentages: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
&lt;br /&gt;
* General REFs: &lt;br /&gt;
** https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* Loop-Server&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Custom Metrics&lt;br /&gt;
** Opened web sockets&lt;br /&gt;
** Total web sockets&lt;br /&gt;
** Bytes/websockets&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway Custom Metrics&lt;br /&gt;
** mt-flow&lt;br /&gt;
** ask-for-certificate&lt;br /&gt;
** try-wrong-code&lt;br /&gt;
** try-right-code&lt;br /&gt;
** momt-flow&lt;br /&gt;
** omxen-message-collision&lt;br /&gt;
** register&lt;br /&gt;
** unregister&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for Loop-Server (per server)&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/loop_err.log&lt;br /&gt;
** /var/log/loop_out.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /var/log/nginx/access.log&lt;br /&gt;
** /var/log/nginx/error.log &lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for MSISDN-Gateway (per server)&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable Loop-Server errors:&lt;br /&gt;
 hekad loop.stderr.log&lt;br /&gt;
 The following are acceptable:&lt;br /&gt;
 Decoder &#039;LoopServer-LoopServerDecoder&#039; error: Failed parsing&lt;br /&gt;
 Plugin &#039;AggregatorOutput&#039; error: writing to heka.shared....&lt;br /&gt;
 &lt;br /&gt;
 nginx logs:&lt;br /&gt;
 The 200s (good stuff) and 101s (websockets) are acceptable. &lt;br /&gt;
 The 499s are an artifact of the current load testing tool (V1).&lt;br /&gt;
 You should only see them at the end of the load test.&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 Any percentage of 405s, 502s, or 503s is not acceptable.&lt;br /&gt;
 &lt;br /&gt;
 Application logs:&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 See the loop_server.out.log file.&lt;br /&gt;
 &lt;br /&gt;
 /var/log/loop_err.log&lt;br /&gt;
 The following are acceptable: connect: res.on(&amp;quot;header&amp;quot;): use on-headers module directly&lt;br /&gt;
 &lt;br /&gt;
 In the Loads Cluster dashboard, watch for the following errors/failures:&lt;br /&gt;
 string indices must be integers&lt;br /&gt;
 OR&lt;br /&gt;
 No JSON object could be decoded&lt;br /&gt;
 OR&lt;br /&gt;
 &#039;hawk-session-token&#039;&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable MSISDN-Gateway errors:&lt;br /&gt;
 The updated load test does generate a certain percentage of errors:&lt;br /&gt;
 https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
 So, expect to see a predefined percentage of 204s and 400s, along with the usual 200s in the nginx access logs.&lt;br /&gt;
 The msisdn-gateway app logs should be clean with just msisdn and test data.&lt;br /&gt;
&lt;br /&gt;
== Monitoring Loop Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard: &lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Loop Server: Check the following repos:&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla-services/docs/issues&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/issues&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** and in Bugzilla for non-Verified bugs: http://mzl.la/1qPxizw&lt;br /&gt;
&lt;br /&gt;
* OPs and Infra&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Repositories and Documentation&lt;br /&gt;
** Check here: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#References&lt;br /&gt;
&lt;br /&gt;
* The QA Test Environments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments&lt;br /&gt;
&lt;br /&gt;
* Test Plans and other QA&lt;br /&gt;
** https://docs.google.com/a/mozilla.com/document/d/1xYZijHnJ1JeJhONm2AYvxSnD2tWztC16WGFyD5U_d6g/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop/Try_Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA#Server&lt;br /&gt;
** https://intranet.mozilla.org/QA/Loop/MVP&lt;br /&gt;
&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TokenServerAndSyncLoadTesting&amp;diff=1025908</id>
		<title>TestEngineering/Services/TokenServerAndSyncLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TokenServerAndSyncLoadTesting&amp;diff=1025908"/>
		<updated>2014-10-16T18:22:43Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Installing Sync 1.5 and the Loads tool on Localhost or AWS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* NOTE: We currently have two Verifier stacks in Stage (and probably Production):&lt;br /&gt;
** The standalone Browser_ID Verifier stack: See that Verifier sections below...&lt;br /&gt;
** A Tokenserver+Verifier stack: See the TokenServer sections below...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
&lt;br /&gt;
* TokenServer+Verifier Stage environment:&lt;br /&gt;
 From the browser: https://token.stage.mozaws.net&lt;br /&gt;
 curl https://token.stage.mozaws.net&lt;br /&gt;
 curl -I https://token.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of tokenserver on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Alternate method:&lt;br /&gt;
 Use the test tool from here: https://github.com/edmoz/fxa-sync-client&lt;br /&gt;
 Install and check all collection types for a known account in Stage:&lt;br /&gt;
 bin/sync-cli.js -e EMAIL -p PASSWORD --env stage -t COLLECTION&lt;br /&gt;
     where -t is one of bookmarks,history,passwords,tabs,addons,prefs,forms&lt;br /&gt;
&lt;br /&gt;
* Verifier Stage environment:&lt;br /&gt;
 In the browser: https://verifier.stage.mozaws.net/&lt;br /&gt;
 curl https://verifier.stage.mozaws.net&lt;br /&gt;
 curl -I https://verifier.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of browserid-verifier on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Sync Server Stage environment:&lt;br /&gt;
 Install server-syncstorage to the local host or AWS instance (see below)&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 Quick test against the TokenServer&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py --use-token-server &amp;lt;Stage TokenServer&amp;gt;&lt;br /&gt;
 Current example:&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py --use-token-server &lt;br /&gt;
     https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
 Quick tests against the Sync nodes&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &amp;lt;Stage Sync Node&amp;gt;#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 Current examples:&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 Get the Node Secret information from OPs&lt;br /&gt;
&lt;br /&gt;
* Using TPS&lt;br /&gt;
** The TPS FxA/Sync automated tests can be used as well, but the following file will have to be edited to add Stage environment configuration parameters: https://github.com/mozilla/gecko-dev/blob/master/testing/tps/tps/testrunner.py&lt;br /&gt;
** See the following wiki page for more information: https://wiki.mozilla.org/User_Services/Sync/Run_TPS&lt;br /&gt;
** See also: https://bugzilla.mozilla.org/show_bug.cgi?id=1006675&lt;br /&gt;
&lt;br /&gt;
== Quick Verification Of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment after a new deployment.&lt;br /&gt;
&lt;br /&gt;
* Tokenserver+Verifier Production Environment&lt;br /&gt;
 In the browser: https://token.services.mozilla.com&lt;br /&gt;
 curl https://token.services.mozilla.com&lt;br /&gt;
 curl -I https://token.services.mozilla.com&lt;br /&gt;
 Then:&lt;br /&gt;
 Use the test tool from here: https://github.com/edmoz/fxa-sync-client&lt;br /&gt;
 Install and check all collection types for a known account in Production:&lt;br /&gt;
 bin/sync-cli.js -e PROD-EMAIL -p PASSWORD -t COLLECTION&lt;br /&gt;
     where -t is one of bookmarks,history,passwords,tabs,addons,prefs,forms&lt;br /&gt;
&lt;br /&gt;
* Verifier Production Environment&lt;br /&gt;
 In the browser: https://verifier.accounts.firefox.com&lt;br /&gt;
 curl https://verifier.accounts.firefox.com&lt;br /&gt;
 curl -I https://verifier.accounts.firefox.com&lt;br /&gt;
 Then:&lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of browserid-verifier on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* Sync Server Stage environment&lt;br /&gt;
 Sign in with a known FxA account and sync data with a current Production account (sync node).&lt;br /&gt;
 Create a new FxA account and set up sync.&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#Loads_Services_Cluster_Environment&lt;br /&gt;
&lt;br /&gt;
== Installing BrowserID-Verifier and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 $ git clone git://github.com/mozilla/browserid-verifier&lt;br /&gt;
 $ cd browserid-verifier&lt;br /&gt;
 Note: You may want to install a specific branch for testing vs defaulting to Master&lt;br /&gt;
 $ npm install&lt;br /&gt;
 $ npm test&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
      Note: This should hit Stage by default: SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the verifier.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Verifier in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://verifier.stage.mozaws.net	&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: The Stage Verifier hits the Stage mockmyid server&lt;br /&gt;
&lt;br /&gt;
* Production environment: &lt;br /&gt;
 $ make test SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
 $ make bench SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Verifier ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=TBD&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing TokenServer+Verifier and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/tokenserver&lt;br /&gt;
 $ cd tokenserver&lt;br /&gt;
 Note: You may want to install a specific branch for testing vs defaulting to Master&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ make test&lt;br /&gt;
     Note: This is for local testing only&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
     Note: This should hit Prod by default: SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with TokenServer+Verifier.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against TokenServer+Verifier in Stage ==&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://token.stage.mozaws.net		&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: This also hits the Stage Verifier, which in turns hits the Stage mockmyid server&lt;br /&gt;
&lt;br /&gt;
* And while we are at it...&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 $ make bench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 $ make bench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for TokenServer+Verifier ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/tokenserver/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing Sync 1.5 and the Loads tool on Localhost or AWS ==&lt;br /&gt;
 Installation:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/server-syncstorage/&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 Note: You may want to install a specific branch for testing vs defaulting to Master&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ make test&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with Sync 1.5.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against Sync 1.5 in Stage ==&lt;br /&gt;
* Loads against specific Sync nodes in Stage&lt;br /&gt;
 $ make test SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
 $ make bench SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
 Sync Stage nodes:&lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net&lt;br /&gt;
     https://sync-2-us-east-1.stage.mozaws.net&lt;br /&gt;
     https://sync-3-us-east-1.stage.mozaws.net&lt;br /&gt;
     ...etc...&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 &lt;br /&gt;
 NOTE: The OPs team has the SECRET string for Stage. Get it from them before you start testing.&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for Sync 1.5 in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Running a combined load test against TokenServer+Verifier and Sync 1.5 in Stage ==&lt;br /&gt;
* A combined loads test against TokenServer and Sync 1.5 in Stage&lt;br /&gt;
* This is done via the server-syncstorage directory that was cloned and built above&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make test SERVER_URL=https://your.tokenserver.here&lt;br /&gt;
 $ make bench SERVER_URL=https://your.tokenserver.here&lt;br /&gt;
 &lt;br /&gt;
 Examples for Stage:&lt;br /&gt;
 $ make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 See https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#TokenServer.2BVerifier_Stage_Environment&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: The Stage Tokenserver hits the Stage Verifier, which, in turn, hits the mockmyid server.&lt;br /&gt;
&lt;br /&gt;
* And while we are at it...&lt;br /&gt;
 Dev environment:&lt;br /&gt;
 Examples:&lt;br /&gt;
 $ make test SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 $ make bench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 &lt;br /&gt;
 Prod environment:&lt;br /&gt;
 Examples:&lt;br /&gt;
 $ make test SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 $ make bench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 See https://wiki.mozilla.org/QA/Services/FxATestEnvironments#FxA.2C_TokenServer.2C_and_Sync_Production_Environments&lt;br /&gt;
 and https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#TokenServer_and_Sync_1.5_Dev_Environments&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for a combined load test in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Prod environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (BrowserID-Verifier, TokenServer, Sync, Combined):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
&lt;br /&gt;
** For make bench (BrowserID-Verifier, TokenServer, Sync, Combined):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
&lt;br /&gt;
** For make megabench (using the LoadsCluster with BrowserID-Verifier, TokenSerer, Sync, Combined):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel) &lt;br /&gt;
*** SSH (the user account needed to SSH into the loads cluster - the default is ubuntu)&lt;br /&gt;
&lt;br /&gt;
* Tokenserver load test code&lt;br /&gt;
** The Tokenserver load test can be configured - see the following lines:&lt;br /&gt;
** Basic Settings: https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** MockMyID: https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L19-L36&lt;br /&gt;
** Percentages: https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L39-L51&lt;br /&gt;
&lt;br /&gt;
* Verifier load test code&lt;br /&gt;
** The Verifier load test can be configured - see the following lines:&lt;br /&gt;
** Various settings: https://github.com/mozilla/browserid-verifier/blob/master/loadtest/loadtest.py#L13-L53&lt;br /&gt;
&lt;br /&gt;
* Sync Server load test code&lt;br /&gt;
** The Sync Server load test can be configured - see the following lines:&lt;br /&gt;
** Setting MockMyID: https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py#L26-L45&lt;br /&gt;
** Setting test distributions: https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py#L48-L83&lt;br /&gt;
&lt;br /&gt;
* REFs: &lt;br /&gt;
** https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/blob/master/loadtest/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* TokenServer&lt;br /&gt;
** File location: tokenserver/loadtest/loadtest.py&lt;br /&gt;
** Inside NoteAssignmentTest, test_realistic is the main load test; the others are for specific behaviors&lt;br /&gt;
** The test runs as following:&lt;br /&gt;
 95% ask for assertions on existing users (on a DB filled by test_single_token_exchange)&lt;br /&gt;
 4% ask for assertion on a new use&lt;br /&gt;
 1% ask for a bad assertion&lt;br /&gt;
** A bug has been filed to get the following additional coverage for the load test:&lt;br /&gt;
*** generation numbers in assertion&lt;br /&gt;
*** client state string&lt;br /&gt;
** A bug has been filed to get some integration tests written:&lt;br /&gt;
*** to cover the edge/error cases not in the load test&lt;br /&gt;
*** to be pointed at a remote server&lt;br /&gt;
&lt;br /&gt;
* Sync&lt;br /&gt;
** File location: server-syncstorage/loadtest/stress.py&lt;br /&gt;
** This is the Sync 2.0 load test that has been back-ported for Sync 1.5.&lt;br /&gt;
** The stress.py file is fully configurable for the following:&lt;br /&gt;
*** client probability&lt;br /&gt;
*** client distribution&lt;br /&gt;
*** collections&lt;br /&gt;
** A bug has been filed to add support for load testing tabs&lt;br /&gt;
*** The tab collection it uses memcache; we need to figure out a way to test it without overloading the server&lt;br /&gt;
** There are currently no constants to define how to select percentages per collection type&lt;br /&gt;
** Right now, we need to manually configure the collections list in stress.py:&lt;br /&gt;
*** collections = [&#039;bookmarks&#039;, &#039;forms&#039;, &#039;passwords&#039;, &#039;history&#039;, &#039;prefs&#039;]&lt;br /&gt;
*** Basically, you can add more entries of each type, since the load test (per user/again/hit/pass) picks randomly from the list for any given request...&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Tokenserver Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* Verifier Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* Sync Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for TokenServer (per server)&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.log.*&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.error.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stdout.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stderr.log&lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for Verifier (per server)&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/squid/access.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stderr.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stdout.log &lt;br /&gt;
&lt;br /&gt;
* 3. Important error logs for Sync (per Sync node)&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/nginx/access.log&lt;br /&gt;
** /media/ephemeral0/error.log&lt;br /&gt;
** /media/ephemeral0/sync/sync.err&lt;br /&gt;
** /media/ephemeral0/sync/sync.log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Acceptable TokenServer errors:&lt;br /&gt;
 1% - 2% failures (as the following)&lt;br /&gt;
 token.log:&lt;br /&gt;
 &amp;quot;name&amp;quot;: &amp;quot;token.assertion.invalid_signature_error&amp;quot;&lt;br /&gt;
 &amp;quot;name&amp;quot;: &amp;quot;token.assertion.verify_failure&amp;quot;&lt;br /&gt;
 nginx access.log:&lt;br /&gt;
 401s&lt;br /&gt;
 NOTE: Values can be tweaked here:&lt;br /&gt;
     https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L58-L60&lt;br /&gt;
 &lt;br /&gt;
 The following types of errors are known:&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
     Exception KeyError: KeyError(49564400,) in &amp;lt;module &#039;threading&#039;...&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.log&lt;br /&gt;
     ...&amp;quot;Starting new HTTP connection (9): 127.0.0.1&amp;quot;, &amp;quot;hostname&amp;quot;: ...&lt;br /&gt;
     {&amp;quot;error&amp;quot;: &amp;quot;StopIteration()&amp;quot;, &amp;quot;traceback&amp;quot;: &amp;quot;Uncaught exception:\n  &lt;br /&gt;
     File \&amp;quot;/data/tokenserver/local/lib/python2.6/site-packages/gunicorn/workers/async.py\&amp;quot;...&lt;br /&gt;
     ...&amp;quot;Connection pool is full, discarding connection: 127.0.0.1&amp;quot;, &amp;quot;...&lt;br /&gt;
 Also, any 499s are probably an artifact of the current (V1) load test.&lt;br /&gt;
 REF:&lt;br /&gt;
 https://bugzilla.mozilla.org/show_bug.cgi?id=1040396&lt;br /&gt;
 https://bugzilla.mozilla.org/show_bug.cgi?id=1040397&lt;br /&gt;
 &lt;br /&gt;
 OLD: Also, it may be the case that the following errors are &amp;quot;acceptable&amp;quot; if TS Stage is larger than Verifier Stage:&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
 Verifier-related errors of these types:&lt;br /&gt;
 &amp;quot;HttpConnectionPool is full, discarding connection: verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
 &amp;quot;Resetting dropped connection: verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
 &amp;quot;Starting new HTTPS connection (179): verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Acceptable Verifier errors:&lt;br /&gt;
 The verifier_out.log will show errors of the following types:&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;untrusted issuer...&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;expired&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;algorithms do not match&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;audience mismatch: scheme mismatch&#039;&lt;br /&gt;
 Also, any 499s in the nginx logs are probably an artifact of the current (V1) load test.&lt;br /&gt;
&lt;br /&gt;
* Acceptable Sync node errors:&lt;br /&gt;
 In the nginx access.log files:&lt;br /&gt;
 We will see some percentage of 404s. Right now we see the following:&lt;br /&gt;
     14% 404s (compared to the total count of 200s)&lt;br /&gt;
     with the config set up as follows:&lt;br /&gt;
          users = 20&lt;br /&gt;
          duration = 1800&lt;br /&gt;
          agents = 5&lt;br /&gt;
 Ideally, the overall percentage of 404s should drop the longer the load test.&lt;br /&gt;
 Usually, you will not see 304s, 400s, 412s, or 415s for a load test,&lt;br /&gt;
 although they may show up in the logs after running the remote integration tests.&lt;br /&gt;
 Also, any 499s are probably an artifact of the current (V1) load test.&lt;br /&gt;
 &lt;br /&gt;
 In /var/log/hekad/sync_1_5.stderr.log&lt;br /&gt;
 You may see some Decoder &#039;Sync-1_5-SlowQuery-MySqlSlowQueryDecoder&#039; error: Failed parsing&lt;br /&gt;
 and a lot of BSO INSERTs&lt;br /&gt;
 &lt;br /&gt;
 In /media/ephemeral0/logs/sync/sync.err&lt;br /&gt;
 You should see expected skew and QueuePool messages and Deprecation warnings&lt;br /&gt;
 Also, these are known&lt;br /&gt;
 Exception SystemExit&lt;br /&gt;
 Exception KeyError&lt;br /&gt;
 This is probably https://bugzilla.mozilla.org/show_bug.cgi?id=1040397&lt;br /&gt;
&lt;br /&gt;
== Monitoring TS and Sync Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard:&lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Tokenserver: &lt;br /&gt;
** Repo: https://github.com/mozilla-services/tokenserver/issues &lt;br /&gt;
** Bugzilla: http://mzl.la/1s4qZKn&lt;br /&gt;
&lt;br /&gt;
* BrowserID-Verifier:&lt;br /&gt;
** Repo: https://github.com/mozilla/browserid-verifier/issues&lt;br /&gt;
** Bugzilla: no specific cateogory&lt;br /&gt;
&lt;br /&gt;
* Sync:&lt;br /&gt;
** Repo: https://github.com/mozilla-services/server-syncstorage/issues&lt;br /&gt;
** Bugzilla: http://mzl.la/VUrYQ5&lt;br /&gt;
&lt;br /&gt;
* OPs and Infrastructure&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Other URLs&lt;br /&gt;
** http://restmail.net&lt;br /&gt;
** https://mockmyid.com&lt;br /&gt;
* Repositories&lt;br /&gt;
** https://github.com/mozilla-services/tokenserver&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier&lt;br /&gt;
** https://github.com/mozilla/browserid-local-verify&lt;br /&gt;
** https://github.com/callahad/mockmyid&lt;br /&gt;
** https://github.com/mozilla/restmail.net&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com&lt;br /&gt;
** https://docs.services.mozilla.com/token/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Sagrada/TokenServer&lt;br /&gt;
** https://docs.services.mozilla.com/sync/&lt;br /&gt;
* The QA Test Environments: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
* Deploying the FxA Load Test environment for broker/agents usage:&lt;br /&gt;
** https://github.com/mozilla/fxa-deployment&lt;br /&gt;
* Sync 1.5 protocol, documentation, etc.&lt;br /&gt;
** https://github.com/mozilla-services/docs&lt;br /&gt;
** https://docs.services.mozilla.com/#how-to&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-fxa.html&lt;br /&gt;
** https://docs.services.mozilla.com/token/apis.html&lt;br /&gt;
** https://docs.services.mozilla.com/storage/apis-1.5.html&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-sync-1.5.html&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-sync-1.5.html&lt;br /&gt;
** https://github.com/mozilla-services/syncserver&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TokenServerAndSyncLoadTesting&amp;diff=1025907</id>
		<title>TestEngineering/Services/TokenServerAndSyncLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TokenServerAndSyncLoadTesting&amp;diff=1025907"/>
		<updated>2014-10-16T18:22:25Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Installing TokenServer+Verifier and the Loads tool on Localhost or AWS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* NOTE: We currently have two Verifier stacks in Stage (and probably Production):&lt;br /&gt;
** The standalone Browser_ID Verifier stack: See that Verifier sections below...&lt;br /&gt;
** A Tokenserver+Verifier stack: See the TokenServer sections below...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
&lt;br /&gt;
* TokenServer+Verifier Stage environment:&lt;br /&gt;
 From the browser: https://token.stage.mozaws.net&lt;br /&gt;
 curl https://token.stage.mozaws.net&lt;br /&gt;
 curl -I https://token.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of tokenserver on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Alternate method:&lt;br /&gt;
 Use the test tool from here: https://github.com/edmoz/fxa-sync-client&lt;br /&gt;
 Install and check all collection types for a known account in Stage:&lt;br /&gt;
 bin/sync-cli.js -e EMAIL -p PASSWORD --env stage -t COLLECTION&lt;br /&gt;
     where -t is one of bookmarks,history,passwords,tabs,addons,prefs,forms&lt;br /&gt;
&lt;br /&gt;
* Verifier Stage environment:&lt;br /&gt;
 In the browser: https://verifier.stage.mozaws.net/&lt;br /&gt;
 curl https://verifier.stage.mozaws.net&lt;br /&gt;
 curl -I https://verifier.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of browserid-verifier on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Sync Server Stage environment:&lt;br /&gt;
 Install server-syncstorage to the local host or AWS instance (see below)&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 Quick test against the TokenServer&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py --use-token-server &amp;lt;Stage TokenServer&amp;gt;&lt;br /&gt;
 Current example:&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py --use-token-server &lt;br /&gt;
     https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
 Quick tests against the Sync nodes&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &amp;lt;Stage Sync Node&amp;gt;#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 Current examples:&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 Get the Node Secret information from OPs&lt;br /&gt;
&lt;br /&gt;
* Using TPS&lt;br /&gt;
** The TPS FxA/Sync automated tests can be used as well, but the following file will have to be edited to add Stage environment configuration parameters: https://github.com/mozilla/gecko-dev/blob/master/testing/tps/tps/testrunner.py&lt;br /&gt;
** See the following wiki page for more information: https://wiki.mozilla.org/User_Services/Sync/Run_TPS&lt;br /&gt;
** See also: https://bugzilla.mozilla.org/show_bug.cgi?id=1006675&lt;br /&gt;
&lt;br /&gt;
== Quick Verification Of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment after a new deployment.&lt;br /&gt;
&lt;br /&gt;
* Tokenserver+Verifier Production Environment&lt;br /&gt;
 In the browser: https://token.services.mozilla.com&lt;br /&gt;
 curl https://token.services.mozilla.com&lt;br /&gt;
 curl -I https://token.services.mozilla.com&lt;br /&gt;
 Then:&lt;br /&gt;
 Use the test tool from here: https://github.com/edmoz/fxa-sync-client&lt;br /&gt;
 Install and check all collection types for a known account in Production:&lt;br /&gt;
 bin/sync-cli.js -e PROD-EMAIL -p PASSWORD -t COLLECTION&lt;br /&gt;
     where -t is one of bookmarks,history,passwords,tabs,addons,prefs,forms&lt;br /&gt;
&lt;br /&gt;
* Verifier Production Environment&lt;br /&gt;
 In the browser: https://verifier.accounts.firefox.com&lt;br /&gt;
 curl https://verifier.accounts.firefox.com&lt;br /&gt;
 curl -I https://verifier.accounts.firefox.com&lt;br /&gt;
 Then:&lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of browserid-verifier on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* Sync Server Stage environment&lt;br /&gt;
 Sign in with a known FxA account and sync data with a current Production account (sync node).&lt;br /&gt;
 Create a new FxA account and set up sync.&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#Loads_Services_Cluster_Environment&lt;br /&gt;
&lt;br /&gt;
== Installing BrowserID-Verifier and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 $ git clone git://github.com/mozilla/browserid-verifier&lt;br /&gt;
 $ cd browserid-verifier&lt;br /&gt;
 Note: You may want to install a specific branch for testing vs defaulting to Master&lt;br /&gt;
 $ npm install&lt;br /&gt;
 $ npm test&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
      Note: This should hit Stage by default: SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the verifier.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Verifier in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://verifier.stage.mozaws.net	&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: The Stage Verifier hits the Stage mockmyid server&lt;br /&gt;
&lt;br /&gt;
* Production environment: &lt;br /&gt;
 $ make test SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
 $ make bench SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Verifier ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=TBD&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing TokenServer+Verifier and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/tokenserver&lt;br /&gt;
 $ cd tokenserver&lt;br /&gt;
 Note: You may want to install a specific branch for testing vs defaulting to Master&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ make test&lt;br /&gt;
     Note: This is for local testing only&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
     Note: This should hit Prod by default: SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with TokenServer+Verifier.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against TokenServer+Verifier in Stage ==&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://token.stage.mozaws.net		&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: This also hits the Stage Verifier, which in turns hits the Stage mockmyid server&lt;br /&gt;
&lt;br /&gt;
* And while we are at it...&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 $ make bench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 $ make bench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for TokenServer+Verifier ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/tokenserver/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing Sync 1.5 and the Loads tool on Localhost or AWS ==&lt;br /&gt;
 Installation:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/server-syncstorage/&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ make test&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with Sync 1.5.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against Sync 1.5 in Stage ==&lt;br /&gt;
* Loads against specific Sync nodes in Stage&lt;br /&gt;
 $ make test SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
 $ make bench SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
 Sync Stage nodes:&lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net&lt;br /&gt;
     https://sync-2-us-east-1.stage.mozaws.net&lt;br /&gt;
     https://sync-3-us-east-1.stage.mozaws.net&lt;br /&gt;
     ...etc...&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 &lt;br /&gt;
 NOTE: The OPs team has the SECRET string for Stage. Get it from them before you start testing.&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for Sync 1.5 in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Running a combined load test against TokenServer+Verifier and Sync 1.5 in Stage ==&lt;br /&gt;
* A combined loads test against TokenServer and Sync 1.5 in Stage&lt;br /&gt;
* This is done via the server-syncstorage directory that was cloned and built above&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make test SERVER_URL=https://your.tokenserver.here&lt;br /&gt;
 $ make bench SERVER_URL=https://your.tokenserver.here&lt;br /&gt;
 &lt;br /&gt;
 Examples for Stage:&lt;br /&gt;
 $ make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 See https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#TokenServer.2BVerifier_Stage_Environment&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: The Stage Tokenserver hits the Stage Verifier, which, in turn, hits the mockmyid server.&lt;br /&gt;
&lt;br /&gt;
* And while we are at it...&lt;br /&gt;
 Dev environment:&lt;br /&gt;
 Examples:&lt;br /&gt;
 $ make test SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 $ make bench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 &lt;br /&gt;
 Prod environment:&lt;br /&gt;
 Examples:&lt;br /&gt;
 $ make test SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 $ make bench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 See https://wiki.mozilla.org/QA/Services/FxATestEnvironments#FxA.2C_TokenServer.2C_and_Sync_Production_Environments&lt;br /&gt;
 and https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#TokenServer_and_Sync_1.5_Dev_Environments&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for a combined load test in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Prod environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (BrowserID-Verifier, TokenServer, Sync, Combined):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
&lt;br /&gt;
** For make bench (BrowserID-Verifier, TokenServer, Sync, Combined):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
&lt;br /&gt;
** For make megabench (using the LoadsCluster with BrowserID-Verifier, TokenSerer, Sync, Combined):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel) &lt;br /&gt;
*** SSH (the user account needed to SSH into the loads cluster - the default is ubuntu)&lt;br /&gt;
&lt;br /&gt;
* Tokenserver load test code&lt;br /&gt;
** The Tokenserver load test can be configured - see the following lines:&lt;br /&gt;
** Basic Settings: https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** MockMyID: https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L19-L36&lt;br /&gt;
** Percentages: https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L39-L51&lt;br /&gt;
&lt;br /&gt;
* Verifier load test code&lt;br /&gt;
** The Verifier load test can be configured - see the following lines:&lt;br /&gt;
** Various settings: https://github.com/mozilla/browserid-verifier/blob/master/loadtest/loadtest.py#L13-L53&lt;br /&gt;
&lt;br /&gt;
* Sync Server load test code&lt;br /&gt;
** The Sync Server load test can be configured - see the following lines:&lt;br /&gt;
** Setting MockMyID: https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py#L26-L45&lt;br /&gt;
** Setting test distributions: https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py#L48-L83&lt;br /&gt;
&lt;br /&gt;
* REFs: &lt;br /&gt;
** https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/blob/master/loadtest/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* TokenServer&lt;br /&gt;
** File location: tokenserver/loadtest/loadtest.py&lt;br /&gt;
** Inside NoteAssignmentTest, test_realistic is the main load test; the others are for specific behaviors&lt;br /&gt;
** The test runs as following:&lt;br /&gt;
 95% ask for assertions on existing users (on a DB filled by test_single_token_exchange)&lt;br /&gt;
 4% ask for assertion on a new use&lt;br /&gt;
 1% ask for a bad assertion&lt;br /&gt;
** A bug has been filed to get the following additional coverage for the load test:&lt;br /&gt;
*** generation numbers in assertion&lt;br /&gt;
*** client state string&lt;br /&gt;
** A bug has been filed to get some integration tests written:&lt;br /&gt;
*** to cover the edge/error cases not in the load test&lt;br /&gt;
*** to be pointed at a remote server&lt;br /&gt;
&lt;br /&gt;
* Sync&lt;br /&gt;
** File location: server-syncstorage/loadtest/stress.py&lt;br /&gt;
** This is the Sync 2.0 load test that has been back-ported for Sync 1.5.&lt;br /&gt;
** The stress.py file is fully configurable for the following:&lt;br /&gt;
*** client probability&lt;br /&gt;
*** client distribution&lt;br /&gt;
*** collections&lt;br /&gt;
** A bug has been filed to add support for load testing tabs&lt;br /&gt;
*** The tab collection it uses memcache; we need to figure out a way to test it without overloading the server&lt;br /&gt;
** There are currently no constants to define how to select percentages per collection type&lt;br /&gt;
** Right now, we need to manually configure the collections list in stress.py:&lt;br /&gt;
*** collections = [&#039;bookmarks&#039;, &#039;forms&#039;, &#039;passwords&#039;, &#039;history&#039;, &#039;prefs&#039;]&lt;br /&gt;
*** Basically, you can add more entries of each type, since the load test (per user/again/hit/pass) picks randomly from the list for any given request...&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Tokenserver Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* Verifier Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* Sync Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for TokenServer (per server)&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.log.*&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.error.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stdout.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stderr.log&lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for Verifier (per server)&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/squid/access.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stderr.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stdout.log &lt;br /&gt;
&lt;br /&gt;
* 3. Important error logs for Sync (per Sync node)&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/nginx/access.log&lt;br /&gt;
** /media/ephemeral0/error.log&lt;br /&gt;
** /media/ephemeral0/sync/sync.err&lt;br /&gt;
** /media/ephemeral0/sync/sync.log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Acceptable TokenServer errors:&lt;br /&gt;
 1% - 2% failures (as the following)&lt;br /&gt;
 token.log:&lt;br /&gt;
 &amp;quot;name&amp;quot;: &amp;quot;token.assertion.invalid_signature_error&amp;quot;&lt;br /&gt;
 &amp;quot;name&amp;quot;: &amp;quot;token.assertion.verify_failure&amp;quot;&lt;br /&gt;
 nginx access.log:&lt;br /&gt;
 401s&lt;br /&gt;
 NOTE: Values can be tweaked here:&lt;br /&gt;
     https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L58-L60&lt;br /&gt;
 &lt;br /&gt;
 The following types of errors are known:&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
     Exception KeyError: KeyError(49564400,) in &amp;lt;module &#039;threading&#039;...&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.log&lt;br /&gt;
     ...&amp;quot;Starting new HTTP connection (9): 127.0.0.1&amp;quot;, &amp;quot;hostname&amp;quot;: ...&lt;br /&gt;
     {&amp;quot;error&amp;quot;: &amp;quot;StopIteration()&amp;quot;, &amp;quot;traceback&amp;quot;: &amp;quot;Uncaught exception:\n  &lt;br /&gt;
     File \&amp;quot;/data/tokenserver/local/lib/python2.6/site-packages/gunicorn/workers/async.py\&amp;quot;...&lt;br /&gt;
     ...&amp;quot;Connection pool is full, discarding connection: 127.0.0.1&amp;quot;, &amp;quot;...&lt;br /&gt;
 Also, any 499s are probably an artifact of the current (V1) load test.&lt;br /&gt;
 REF:&lt;br /&gt;
 https://bugzilla.mozilla.org/show_bug.cgi?id=1040396&lt;br /&gt;
 https://bugzilla.mozilla.org/show_bug.cgi?id=1040397&lt;br /&gt;
 &lt;br /&gt;
 OLD: Also, it may be the case that the following errors are &amp;quot;acceptable&amp;quot; if TS Stage is larger than Verifier Stage:&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
 Verifier-related errors of these types:&lt;br /&gt;
 &amp;quot;HttpConnectionPool is full, discarding connection: verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
 &amp;quot;Resetting dropped connection: verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
 &amp;quot;Starting new HTTPS connection (179): verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Acceptable Verifier errors:&lt;br /&gt;
 The verifier_out.log will show errors of the following types:&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;untrusted issuer...&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;expired&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;algorithms do not match&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;audience mismatch: scheme mismatch&#039;&lt;br /&gt;
 Also, any 499s in the nginx logs are probably an artifact of the current (V1) load test.&lt;br /&gt;
&lt;br /&gt;
* Acceptable Sync node errors:&lt;br /&gt;
 In the nginx access.log files:&lt;br /&gt;
 We will see some percentage of 404s. Right now we see the following:&lt;br /&gt;
     14% 404s (compared to the total count of 200s)&lt;br /&gt;
     with the config set up as follows:&lt;br /&gt;
          users = 20&lt;br /&gt;
          duration = 1800&lt;br /&gt;
          agents = 5&lt;br /&gt;
 Ideally, the overall percentage of 404s should drop the longer the load test.&lt;br /&gt;
 Usually, you will not see 304s, 400s, 412s, or 415s for a load test,&lt;br /&gt;
 although they may show up in the logs after running the remote integration tests.&lt;br /&gt;
 Also, any 499s are probably an artifact of the current (V1) load test.&lt;br /&gt;
 &lt;br /&gt;
 In /var/log/hekad/sync_1_5.stderr.log&lt;br /&gt;
 You may see some Decoder &#039;Sync-1_5-SlowQuery-MySqlSlowQueryDecoder&#039; error: Failed parsing&lt;br /&gt;
 and a lot of BSO INSERTs&lt;br /&gt;
 &lt;br /&gt;
 In /media/ephemeral0/logs/sync/sync.err&lt;br /&gt;
 You should see expected skew and QueuePool messages and Deprecation warnings&lt;br /&gt;
 Also, these are known&lt;br /&gt;
 Exception SystemExit&lt;br /&gt;
 Exception KeyError&lt;br /&gt;
 This is probably https://bugzilla.mozilla.org/show_bug.cgi?id=1040397&lt;br /&gt;
&lt;br /&gt;
== Monitoring TS and Sync Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard:&lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Tokenserver: &lt;br /&gt;
** Repo: https://github.com/mozilla-services/tokenserver/issues &lt;br /&gt;
** Bugzilla: http://mzl.la/1s4qZKn&lt;br /&gt;
&lt;br /&gt;
* BrowserID-Verifier:&lt;br /&gt;
** Repo: https://github.com/mozilla/browserid-verifier/issues&lt;br /&gt;
** Bugzilla: no specific cateogory&lt;br /&gt;
&lt;br /&gt;
* Sync:&lt;br /&gt;
** Repo: https://github.com/mozilla-services/server-syncstorage/issues&lt;br /&gt;
** Bugzilla: http://mzl.la/VUrYQ5&lt;br /&gt;
&lt;br /&gt;
* OPs and Infrastructure&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Other URLs&lt;br /&gt;
** http://restmail.net&lt;br /&gt;
** https://mockmyid.com&lt;br /&gt;
* Repositories&lt;br /&gt;
** https://github.com/mozilla-services/tokenserver&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier&lt;br /&gt;
** https://github.com/mozilla/browserid-local-verify&lt;br /&gt;
** https://github.com/callahad/mockmyid&lt;br /&gt;
** https://github.com/mozilla/restmail.net&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com&lt;br /&gt;
** https://docs.services.mozilla.com/token/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Sagrada/TokenServer&lt;br /&gt;
** https://docs.services.mozilla.com/sync/&lt;br /&gt;
* The QA Test Environments: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
* Deploying the FxA Load Test environment for broker/agents usage:&lt;br /&gt;
** https://github.com/mozilla/fxa-deployment&lt;br /&gt;
* Sync 1.5 protocol, documentation, etc.&lt;br /&gt;
** https://github.com/mozilla-services/docs&lt;br /&gt;
** https://docs.services.mozilla.com/#how-to&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-fxa.html&lt;br /&gt;
** https://docs.services.mozilla.com/token/apis.html&lt;br /&gt;
** https://docs.services.mozilla.com/storage/apis-1.5.html&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-sync-1.5.html&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-sync-1.5.html&lt;br /&gt;
** https://github.com/mozilla-services/syncserver&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TokenServerAndSyncLoadTesting&amp;diff=1025905</id>
		<title>TestEngineering/Services/TokenServerAndSyncLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TokenServerAndSyncLoadTesting&amp;diff=1025905"/>
		<updated>2014-10-16T18:22:04Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Installing BrowserID-Verifier and the Loads tool on Localhost or AWS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* NOTE: We currently have two Verifier stacks in Stage (and probably Production):&lt;br /&gt;
** The standalone Browser_ID Verifier stack: See that Verifier sections below...&lt;br /&gt;
** A Tokenserver+Verifier stack: See the TokenServer sections below...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
&lt;br /&gt;
* TokenServer+Verifier Stage environment:&lt;br /&gt;
 From the browser: https://token.stage.mozaws.net&lt;br /&gt;
 curl https://token.stage.mozaws.net&lt;br /&gt;
 curl -I https://token.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of tokenserver on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Alternate method:&lt;br /&gt;
 Use the test tool from here: https://github.com/edmoz/fxa-sync-client&lt;br /&gt;
 Install and check all collection types for a known account in Stage:&lt;br /&gt;
 bin/sync-cli.js -e EMAIL -p PASSWORD --env stage -t COLLECTION&lt;br /&gt;
     where -t is one of bookmarks,history,passwords,tabs,addons,prefs,forms&lt;br /&gt;
&lt;br /&gt;
* Verifier Stage environment:&lt;br /&gt;
 In the browser: https://verifier.stage.mozaws.net/&lt;br /&gt;
 curl https://verifier.stage.mozaws.net&lt;br /&gt;
 curl -I https://verifier.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of browserid-verifier on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Sync Server Stage environment:&lt;br /&gt;
 Install server-syncstorage to the local host or AWS instance (see below)&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 Quick test against the TokenServer&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py --use-token-server &amp;lt;Stage TokenServer&amp;gt;&lt;br /&gt;
 Current example:&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py --use-token-server &lt;br /&gt;
     https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
 Quick tests against the Sync nodes&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &amp;lt;Stage Sync Node&amp;gt;#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 Current examples:&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 Get the Node Secret information from OPs&lt;br /&gt;
&lt;br /&gt;
* Using TPS&lt;br /&gt;
** The TPS FxA/Sync automated tests can be used as well, but the following file will have to be edited to add Stage environment configuration parameters: https://github.com/mozilla/gecko-dev/blob/master/testing/tps/tps/testrunner.py&lt;br /&gt;
** See the following wiki page for more information: https://wiki.mozilla.org/User_Services/Sync/Run_TPS&lt;br /&gt;
** See also: https://bugzilla.mozilla.org/show_bug.cgi?id=1006675&lt;br /&gt;
&lt;br /&gt;
== Quick Verification Of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment after a new deployment.&lt;br /&gt;
&lt;br /&gt;
* Tokenserver+Verifier Production Environment&lt;br /&gt;
 In the browser: https://token.services.mozilla.com&lt;br /&gt;
 curl https://token.services.mozilla.com&lt;br /&gt;
 curl -I https://token.services.mozilla.com&lt;br /&gt;
 Then:&lt;br /&gt;
 Use the test tool from here: https://github.com/edmoz/fxa-sync-client&lt;br /&gt;
 Install and check all collection types for a known account in Production:&lt;br /&gt;
 bin/sync-cli.js -e PROD-EMAIL -p PASSWORD -t COLLECTION&lt;br /&gt;
     where -t is one of bookmarks,history,passwords,tabs,addons,prefs,forms&lt;br /&gt;
&lt;br /&gt;
* Verifier Production Environment&lt;br /&gt;
 In the browser: https://verifier.accounts.firefox.com&lt;br /&gt;
 curl https://verifier.accounts.firefox.com&lt;br /&gt;
 curl -I https://verifier.accounts.firefox.com&lt;br /&gt;
 Then:&lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of browserid-verifier on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* Sync Server Stage environment&lt;br /&gt;
 Sign in with a known FxA account and sync data with a current Production account (sync node).&lt;br /&gt;
 Create a new FxA account and set up sync.&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#Loads_Services_Cluster_Environment&lt;br /&gt;
&lt;br /&gt;
== Installing BrowserID-Verifier and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 $ git clone git://github.com/mozilla/browserid-verifier&lt;br /&gt;
 $ cd browserid-verifier&lt;br /&gt;
 Note: You may want to install a specific branch for testing vs defaulting to Master&lt;br /&gt;
 $ npm install&lt;br /&gt;
 $ npm test&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
      Note: This should hit Stage by default: SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the verifier.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Verifier in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://verifier.stage.mozaws.net	&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: The Stage Verifier hits the Stage mockmyid server&lt;br /&gt;
&lt;br /&gt;
* Production environment: &lt;br /&gt;
 $ make test SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
 $ make bench SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Verifier ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=TBD&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing TokenServer+Verifier and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/tokenserver&lt;br /&gt;
 $ cd tokenserver&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ make test&lt;br /&gt;
     Note: This is for local testing only&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
     Note: This should hit Prod by default: SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with TokenServer+Verifier.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against TokenServer+Verifier in Stage ==&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://token.stage.mozaws.net		&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: This also hits the Stage Verifier, which in turns hits the Stage mockmyid server&lt;br /&gt;
&lt;br /&gt;
* And while we are at it...&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 $ make bench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 $ make bench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for TokenServer+Verifier ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/tokenserver/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing Sync 1.5 and the Loads tool on Localhost or AWS ==&lt;br /&gt;
 Installation:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/server-syncstorage/&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ make test&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with Sync 1.5.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against Sync 1.5 in Stage ==&lt;br /&gt;
* Loads against specific Sync nodes in Stage&lt;br /&gt;
 $ make test SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
 $ make bench SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
 Sync Stage nodes:&lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net&lt;br /&gt;
     https://sync-2-us-east-1.stage.mozaws.net&lt;br /&gt;
     https://sync-3-us-east-1.stage.mozaws.net&lt;br /&gt;
     ...etc...&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 &lt;br /&gt;
 NOTE: The OPs team has the SECRET string for Stage. Get it from them before you start testing.&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for Sync 1.5 in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Running a combined load test against TokenServer+Verifier and Sync 1.5 in Stage ==&lt;br /&gt;
* A combined loads test against TokenServer and Sync 1.5 in Stage&lt;br /&gt;
* This is done via the server-syncstorage directory that was cloned and built above&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make test SERVER_URL=https://your.tokenserver.here&lt;br /&gt;
 $ make bench SERVER_URL=https://your.tokenserver.here&lt;br /&gt;
 &lt;br /&gt;
 Examples for Stage:&lt;br /&gt;
 $ make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 See https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#TokenServer.2BVerifier_Stage_Environment&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: The Stage Tokenserver hits the Stage Verifier, which, in turn, hits the mockmyid server.&lt;br /&gt;
&lt;br /&gt;
* And while we are at it...&lt;br /&gt;
 Dev environment:&lt;br /&gt;
 Examples:&lt;br /&gt;
 $ make test SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 $ make bench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 &lt;br /&gt;
 Prod environment:&lt;br /&gt;
 Examples:&lt;br /&gt;
 $ make test SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 $ make bench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 See https://wiki.mozilla.org/QA/Services/FxATestEnvironments#FxA.2C_TokenServer.2C_and_Sync_Production_Environments&lt;br /&gt;
 and https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#TokenServer_and_Sync_1.5_Dev_Environments&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for a combined load test in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Prod environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (BrowserID-Verifier, TokenServer, Sync, Combined):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
&lt;br /&gt;
** For make bench (BrowserID-Verifier, TokenServer, Sync, Combined):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
&lt;br /&gt;
** For make megabench (using the LoadsCluster with BrowserID-Verifier, TokenSerer, Sync, Combined):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel) &lt;br /&gt;
*** SSH (the user account needed to SSH into the loads cluster - the default is ubuntu)&lt;br /&gt;
&lt;br /&gt;
* Tokenserver load test code&lt;br /&gt;
** The Tokenserver load test can be configured - see the following lines:&lt;br /&gt;
** Basic Settings: https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** MockMyID: https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L19-L36&lt;br /&gt;
** Percentages: https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L39-L51&lt;br /&gt;
&lt;br /&gt;
* Verifier load test code&lt;br /&gt;
** The Verifier load test can be configured - see the following lines:&lt;br /&gt;
** Various settings: https://github.com/mozilla/browserid-verifier/blob/master/loadtest/loadtest.py#L13-L53&lt;br /&gt;
&lt;br /&gt;
* Sync Server load test code&lt;br /&gt;
** The Sync Server load test can be configured - see the following lines:&lt;br /&gt;
** Setting MockMyID: https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py#L26-L45&lt;br /&gt;
** Setting test distributions: https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py#L48-L83&lt;br /&gt;
&lt;br /&gt;
* REFs: &lt;br /&gt;
** https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/blob/master/loadtest/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* TokenServer&lt;br /&gt;
** File location: tokenserver/loadtest/loadtest.py&lt;br /&gt;
** Inside NoteAssignmentTest, test_realistic is the main load test; the others are for specific behaviors&lt;br /&gt;
** The test runs as following:&lt;br /&gt;
 95% ask for assertions on existing users (on a DB filled by test_single_token_exchange)&lt;br /&gt;
 4% ask for assertion on a new use&lt;br /&gt;
 1% ask for a bad assertion&lt;br /&gt;
** A bug has been filed to get the following additional coverage for the load test:&lt;br /&gt;
*** generation numbers in assertion&lt;br /&gt;
*** client state string&lt;br /&gt;
** A bug has been filed to get some integration tests written:&lt;br /&gt;
*** to cover the edge/error cases not in the load test&lt;br /&gt;
*** to be pointed at a remote server&lt;br /&gt;
&lt;br /&gt;
* Sync&lt;br /&gt;
** File location: server-syncstorage/loadtest/stress.py&lt;br /&gt;
** This is the Sync 2.0 load test that has been back-ported for Sync 1.5.&lt;br /&gt;
** The stress.py file is fully configurable for the following:&lt;br /&gt;
*** client probability&lt;br /&gt;
*** client distribution&lt;br /&gt;
*** collections&lt;br /&gt;
** A bug has been filed to add support for load testing tabs&lt;br /&gt;
*** The tab collection it uses memcache; we need to figure out a way to test it without overloading the server&lt;br /&gt;
** There are currently no constants to define how to select percentages per collection type&lt;br /&gt;
** Right now, we need to manually configure the collections list in stress.py:&lt;br /&gt;
*** collections = [&#039;bookmarks&#039;, &#039;forms&#039;, &#039;passwords&#039;, &#039;history&#039;, &#039;prefs&#039;]&lt;br /&gt;
*** Basically, you can add more entries of each type, since the load test (per user/again/hit/pass) picks randomly from the list for any given request...&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Tokenserver Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* Verifier Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* Sync Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for TokenServer (per server)&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.log.*&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.error.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stdout.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stderr.log&lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for Verifier (per server)&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/squid/access.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stderr.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stdout.log &lt;br /&gt;
&lt;br /&gt;
* 3. Important error logs for Sync (per Sync node)&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/nginx/access.log&lt;br /&gt;
** /media/ephemeral0/error.log&lt;br /&gt;
** /media/ephemeral0/sync/sync.err&lt;br /&gt;
** /media/ephemeral0/sync/sync.log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Acceptable TokenServer errors:&lt;br /&gt;
 1% - 2% failures (as the following)&lt;br /&gt;
 token.log:&lt;br /&gt;
 &amp;quot;name&amp;quot;: &amp;quot;token.assertion.invalid_signature_error&amp;quot;&lt;br /&gt;
 &amp;quot;name&amp;quot;: &amp;quot;token.assertion.verify_failure&amp;quot;&lt;br /&gt;
 nginx access.log:&lt;br /&gt;
 401s&lt;br /&gt;
 NOTE: Values can be tweaked here:&lt;br /&gt;
     https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L58-L60&lt;br /&gt;
 &lt;br /&gt;
 The following types of errors are known:&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
     Exception KeyError: KeyError(49564400,) in &amp;lt;module &#039;threading&#039;...&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.log&lt;br /&gt;
     ...&amp;quot;Starting new HTTP connection (9): 127.0.0.1&amp;quot;, &amp;quot;hostname&amp;quot;: ...&lt;br /&gt;
     {&amp;quot;error&amp;quot;: &amp;quot;StopIteration()&amp;quot;, &amp;quot;traceback&amp;quot;: &amp;quot;Uncaught exception:\n  &lt;br /&gt;
     File \&amp;quot;/data/tokenserver/local/lib/python2.6/site-packages/gunicorn/workers/async.py\&amp;quot;...&lt;br /&gt;
     ...&amp;quot;Connection pool is full, discarding connection: 127.0.0.1&amp;quot;, &amp;quot;...&lt;br /&gt;
 Also, any 499s are probably an artifact of the current (V1) load test.&lt;br /&gt;
 REF:&lt;br /&gt;
 https://bugzilla.mozilla.org/show_bug.cgi?id=1040396&lt;br /&gt;
 https://bugzilla.mozilla.org/show_bug.cgi?id=1040397&lt;br /&gt;
 &lt;br /&gt;
 OLD: Also, it may be the case that the following errors are &amp;quot;acceptable&amp;quot; if TS Stage is larger than Verifier Stage:&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
 Verifier-related errors of these types:&lt;br /&gt;
 &amp;quot;HttpConnectionPool is full, discarding connection: verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
 &amp;quot;Resetting dropped connection: verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
 &amp;quot;Starting new HTTPS connection (179): verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Acceptable Verifier errors:&lt;br /&gt;
 The verifier_out.log will show errors of the following types:&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;untrusted issuer...&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;expired&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;algorithms do not match&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;audience mismatch: scheme mismatch&#039;&lt;br /&gt;
 Also, any 499s in the nginx logs are probably an artifact of the current (V1) load test.&lt;br /&gt;
&lt;br /&gt;
* Acceptable Sync node errors:&lt;br /&gt;
 In the nginx access.log files:&lt;br /&gt;
 We will see some percentage of 404s. Right now we see the following:&lt;br /&gt;
     14% 404s (compared to the total count of 200s)&lt;br /&gt;
     with the config set up as follows:&lt;br /&gt;
          users = 20&lt;br /&gt;
          duration = 1800&lt;br /&gt;
          agents = 5&lt;br /&gt;
 Ideally, the overall percentage of 404s should drop the longer the load test.&lt;br /&gt;
 Usually, you will not see 304s, 400s, 412s, or 415s for a load test,&lt;br /&gt;
 although they may show up in the logs after running the remote integration tests.&lt;br /&gt;
 Also, any 499s are probably an artifact of the current (V1) load test.&lt;br /&gt;
 &lt;br /&gt;
 In /var/log/hekad/sync_1_5.stderr.log&lt;br /&gt;
 You may see some Decoder &#039;Sync-1_5-SlowQuery-MySqlSlowQueryDecoder&#039; error: Failed parsing&lt;br /&gt;
 and a lot of BSO INSERTs&lt;br /&gt;
 &lt;br /&gt;
 In /media/ephemeral0/logs/sync/sync.err&lt;br /&gt;
 You should see expected skew and QueuePool messages and Deprecation warnings&lt;br /&gt;
 Also, these are known&lt;br /&gt;
 Exception SystemExit&lt;br /&gt;
 Exception KeyError&lt;br /&gt;
 This is probably https://bugzilla.mozilla.org/show_bug.cgi?id=1040397&lt;br /&gt;
&lt;br /&gt;
== Monitoring TS and Sync Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard:&lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Tokenserver: &lt;br /&gt;
** Repo: https://github.com/mozilla-services/tokenserver/issues &lt;br /&gt;
** Bugzilla: http://mzl.la/1s4qZKn&lt;br /&gt;
&lt;br /&gt;
* BrowserID-Verifier:&lt;br /&gt;
** Repo: https://github.com/mozilla/browserid-verifier/issues&lt;br /&gt;
** Bugzilla: no specific cateogory&lt;br /&gt;
&lt;br /&gt;
* Sync:&lt;br /&gt;
** Repo: https://github.com/mozilla-services/server-syncstorage/issues&lt;br /&gt;
** Bugzilla: http://mzl.la/VUrYQ5&lt;br /&gt;
&lt;br /&gt;
* OPs and Infrastructure&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Other URLs&lt;br /&gt;
** http://restmail.net&lt;br /&gt;
** https://mockmyid.com&lt;br /&gt;
* Repositories&lt;br /&gt;
** https://github.com/mozilla-services/tokenserver&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier&lt;br /&gt;
** https://github.com/mozilla/browserid-local-verify&lt;br /&gt;
** https://github.com/callahad/mockmyid&lt;br /&gt;
** https://github.com/mozilla/restmail.net&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com&lt;br /&gt;
** https://docs.services.mozilla.com/token/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Sagrada/TokenServer&lt;br /&gt;
** https://docs.services.mozilla.com/sync/&lt;br /&gt;
* The QA Test Environments: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
* Deploying the FxA Load Test environment for broker/agents usage:&lt;br /&gt;
** https://github.com/mozilla/fxa-deployment&lt;br /&gt;
* Sync 1.5 protocol, documentation, etc.&lt;br /&gt;
** https://github.com/mozilla-services/docs&lt;br /&gt;
** https://docs.services.mozilla.com/#how-to&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-fxa.html&lt;br /&gt;
** https://docs.services.mozilla.com/token/apis.html&lt;br /&gt;
** https://docs.services.mozilla.com/storage/apis-1.5.html&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-sync-1.5.html&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-sync-1.5.html&lt;br /&gt;
** https://github.com/mozilla-services/syncserver&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/FxALoadTesting&amp;diff=1025904</id>
		<title>TestEngineering/Services/FxALoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/FxALoadTesting&amp;diff=1025904"/>
		<updated>2014-10-16T18:21:21Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Installing FxA-Auth-Server and the Loads tool on Localhost or AWS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
 Install FxA-Auth-Server to a local host or an AWS instance (see below)&lt;br /&gt;
 $ cd fxa-auth-server&lt;br /&gt;
 Run the integration tests against the remote Stage server (load balancer)&lt;br /&gt;
 $ PUBLIC_URL=&amp;lt;FxA Stage&amp;gt; npm run test-remote&lt;br /&gt;
 Current example:&lt;br /&gt;
 $ PUBLIC_URL=https://api-accounts.stage.mozaws.net npm run test-remote&lt;br /&gt;
* NOTE: Make sure to install and test from the same branch that is deployed to Stage (ie do not use Master for running the tests against Stage or Production).&lt;br /&gt;
&lt;br /&gt;
* Using TPS&lt;br /&gt;
** The TPS FxA/Sync automated tests can be used as well, but the following file will have to be edited to add Stage environment configuration parameters: https://github.com/mozilla/gecko-dev/blob/master/testing/tps/tps/testrunner.py&lt;br /&gt;
** See the following wiki page for more information: https://wiki.mozilla.org/User_Services/Sync/Run_TPS&lt;br /&gt;
** See also: https://bugzilla.mozilla.org/show_bug.cgi?id=1006675&lt;br /&gt;
&lt;br /&gt;
== Quick Verification Of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment after each new deployment. There are other verifications that can be run as well&lt;br /&gt;
 Install FxA-Auth-Server to a local host or an AWS instance (see below)&lt;br /&gt;
 $ cd fxa-auth-server&lt;br /&gt;
 Run the integration tests against the remote Stage server (load balancer)&lt;br /&gt;
 $ PUBLIC_URL=&amp;lt;FxA Prod&amp;gt; npm run test-remote&lt;br /&gt;
 Current example:&lt;br /&gt;
 $ PUBLIC_URL=https://api.accounts.firefox.com npm run test-remote&lt;br /&gt;
* NOTE: Make sure to install and test from the same branch that is deployed to Production.&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Installing FxA-Auth-Server and the Loads tool on Localhost or AWS ==&lt;br /&gt;
 Installation:&lt;br /&gt;
 $ git clone https://github.com/mozilla/fxa-auth-server.git&lt;br /&gt;
 $ cd ./fxa-auth-server&lt;br /&gt;
 Note: You may want to install a specific branch for testing vs defaulting to Master&lt;br /&gt;
 $ npm install&lt;br /&gt;
 $ npm test&lt;br /&gt;
 $ cd ./test/load&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* Note: &#039;npm install&#039; may need to be run now as root.&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with FxA-Auth-Server.&lt;br /&gt;
&lt;br /&gt;
== Running the Loads tool against FxA Stage ==&lt;br /&gt;
* The basic load test can be run as follows&lt;br /&gt;
 $ make test SERVER_URL=https://api-accounts.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* The full, default load test can be run as follows&lt;br /&gt;
 $ make bench SERVER_URL=https://api-accounts.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* Configuring the bench load test - config folder:&lt;br /&gt;
** The test.ini file (for make test) can be configured for the following:&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
** The bench.ini file (for make bench) can be configured for the following:&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
 &lt;br /&gt;
* For both tests, start with the defaults, then tweak the duration. Users and Agents are optional tweaks/changes. Also, we can configure the bench load test to run in detached mode with an appropriate loads detach and observer settings.&lt;br /&gt;
&lt;br /&gt;
* REF: https://github.com/mozilla/fxa-auth-server/tree/master/loadtest/config&lt;br /&gt;
&lt;br /&gt;
== Running the Loads tool against FxA Development or Production ==&lt;br /&gt;
* This can be done if we are comparing Stage vs. some other environment and have access to the AWS logs in Dev or Production:&lt;br /&gt;
&lt;br /&gt;
* Dev:&lt;br /&gt;
 $ make test SERVER_URL=https://accounts.dev.lcip.org&lt;br /&gt;
 $ make bench SERVER_URL=https://accounts.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Prod:&lt;br /&gt;
 $ make test SERVER_URL=https://api.accounts.firefox.com&lt;br /&gt;
 $ make bench SERVER_URL=https://api.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* The same optional configuration changes apply here.&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench). &lt;br /&gt;
&lt;br /&gt;
* Testing against the Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://api-accounts.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Testing against the Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://api-accounts.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Testing against the Prod enviornment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://api.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* Configuring the megabench load test - config folder:&lt;br /&gt;
** The megabench.ini file (for make megabench) can be configured for the following:&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (leave as defined for now)&lt;br /&gt;
*** Python dependencies (leave as defined for now)&lt;br /&gt;
*** Broker to use for testing (leaves as defined for now - this is broker in the Loads Cluster)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel)&lt;br /&gt;
&lt;br /&gt;
* REF: https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
* REF: https://github.com/mozilla/fxa-auth-server/tree/master/loadtest/config&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test:&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
&lt;br /&gt;
** For make bench:&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
&lt;br /&gt;
** For make megabench:&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Broker to use for testing (leaves as defined for now - this is broker in the Loads Cluster)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel)&lt;br /&gt;
&lt;br /&gt;
* Load Test code: loadtests.py&lt;br /&gt;
** The load test can be configured in the code - see the following lines:&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/blob/master/test/load/loadtests.py#L17-L39&lt;br /&gt;
&lt;br /&gt;
* General REFs: &lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/blob/master/test/load/loadtests.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* Location fxa-auth-server/loadtest/loadtests.py&lt;br /&gt;
* The following items are covered in the load test&lt;br /&gt;
** test_auth_server is the main entry point in the loadtests.py file&lt;br /&gt;
*** account creation&lt;br /&gt;
*** session creation&lt;br /&gt;
** account deletion&lt;br /&gt;
** session deletion&lt;br /&gt;
* Integration tests&lt;br /&gt;
** These are designed to cover the edge/error cases that are not applicable to the load test&lt;br /&gt;
** The tests can be run against a remote server&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues. &lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for FxA-Auth-Server (per server)&lt;br /&gt;
** /media/ephemeral0/fxa-auth-server/auth_err.log.*&lt;br /&gt;
** /media/ephemeral0/fxa-auth-server/auth_out.log&lt;br /&gt;
** /media/ephemeral0/heka/hekad_err.log&lt;br /&gt;
** /media/ephemeral0/heka/hekad_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/access.log &lt;br /&gt;
** /media/ephemeral0/nginx/logs/error.log&lt;br /&gt;
&lt;br /&gt;
* Acceptable FxA-Auth-Server errors&lt;br /&gt;
 503s: especially of this type - /v1/certificate/sign - are usually a sign that we are overloading the hosts&lt;br /&gt;
 &lt;br /&gt;
 400s: we should never see these in the logs, especially if the &amp;quot;errno&amp;quot; value is 105. &lt;br /&gt;
     Check the fxa-auth-server/auth_err.log&lt;br /&gt;
 400s: &amp;quot;errno&amp;quot; values of 101, 102 are ok. These can be expected during a load test.&lt;br /&gt;
 &lt;br /&gt;
 ELB issues: we may see 503s and corresponding &amp;quot;err&amp;quot;:&amp;quot;cannot enqueue work: maximum backlog exceeded (30)&amp;quot; &lt;br /&gt;
     messages if one or more of the hosts behind the ELB is receiving most of the load traffic.&lt;br /&gt;
 REF: https://github.com/mozilla/fxa-auth-server/issues/647&lt;br /&gt;
&lt;br /&gt;
== Monitoring FxA Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com/&lt;br /&gt;
** or http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard:&lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* FxA&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/issues&lt;br /&gt;
** https://github.com/mozilla/fxa-content-server/issues&lt;br /&gt;
** and several others&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** No specific category&lt;br /&gt;
&lt;br /&gt;
* Infrastructure&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and clusters&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
&lt;br /&gt;
== Capacity Planning Stage and Production ==&lt;br /&gt;
* QA is tasked with providing some capacity requirements and constraints based on repeated load testing of the FxA-Auth-Server Stage environment.&lt;br /&gt;
* The goal is to be able to work with OPs to develop a realistic plan for deploying and maintaining the production environment at a level expected for projected user traffic, etc.&lt;br /&gt;
&lt;br /&gt;
* Brainstorming the QA role:&lt;br /&gt;
** QA needs to get some realistic numbers from the Product team. This could be as simple as traffic flow (number of users per day or per segments of the day - peaks and valleys) or more detailed:&lt;br /&gt;
*** Traffic flow - QPS/RPS&lt;br /&gt;
*** Average number of users per time segment&lt;br /&gt;
*** Average and peak latency&lt;br /&gt;
*** Error percentages and thresholds&lt;br /&gt;
*** etc&lt;br /&gt;
** QA gets help from OPs to learn how to measure those required numbers/values using StackDriver or other tools (or to get data from OPsView). If those numbers can not be measured then we either need to&lt;br /&gt;
*** get a different set of data points from the Product team&lt;br /&gt;
*** enhance the current tools to track and measure the required data&lt;br /&gt;
** QA does repeated, scheduled, well-defined load tests in Stage while actively monitoring the results, logs, data, etc.&lt;br /&gt;
** QA finds a stable configuration that - when scaled - would &lt;br /&gt;
*** match the needs of Product when we release&lt;br /&gt;
*** match the realisitc capacity planning that OPs normally does&lt;br /&gt;
&lt;br /&gt;
* Dependencies&lt;br /&gt;
** Realistic traffic/user numbers from the FxA Product team&lt;br /&gt;
** Timely training on monitoring tools from the OPs team&lt;br /&gt;
** Regular and realistic scaling/testing of deployments to Stage by QA given our current pre-release and post-release schedules&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Repository: https://github.com/mozilla/fxa-auth-server&lt;br /&gt;
* The QA Test Environments:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
* Deploying the FxA Load Test environment for broker/agents usage:&lt;br /&gt;
** https://github.com/mozilla/fxa-deployment&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1025194</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1025194"/>
		<updated>2014-10-14T21:03:58Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Sentry Server Stage Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 Browser: Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** Sentry: http://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for loop-client-*&lt;br /&gt;
** ELB: loop-client-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* Version string&lt;br /&gt;
** /data/msisdn-gateway/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** http://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** None at this time. See https://bugzilla.mozilla.org/show_bug.cgi?id=1063134&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1025192</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1025192"/>
		<updated>2014-10-14T21:03:44Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Loop Server Stage Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 Browser: Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** Sentry: http://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for loop-client-*&lt;br /&gt;
** ELB: loop-client-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* Version string&lt;br /&gt;
** /data/msisdn-gateway/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** None at this time. See https://bugzilla.mozilla.org/show_bug.cgi?id=1063134&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1018454</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1018454"/>
		<updated>2014-09-25T21:52:50Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* MSISDN Gateway Server Stage Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 Browser: Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** Sentry: https://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for loop-client-*&lt;br /&gt;
** ELB: loop-client-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* Version string&lt;br /&gt;
** /data/msisdn-gateway/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** None at this time. See https://bugzilla.mozilla.org/show_bug.cgi?id=1063134&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1018099</id>
		<title>TestEngineering/Services/LoopServerLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1018099"/>
		<updated>2014-09-24T19:37:06Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Quick Verification of Production Deployments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 Check https://call.stage.mozaws.net/config.js&lt;br /&gt;
 Should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
 and&lt;br /&gt;
 WIP from the client team: end to end tests&lt;br /&gt;
 Also:&lt;br /&gt;
 https://call.stage.mozaws.net&lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd msisdn-gateway&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Quick Verification of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment for after each Production deployment.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Then run a few &#039;make test&#039; commands from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://loop.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party server&lt;br /&gt;
 &lt;br /&gt;
 Then perform actual loop testing via desktop (Aurora/Nightly so far) and FxOS (2.1)&lt;br /&gt;
 Verify that requests and strings point to Production environments&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 should return &amp;quot;Welcome to the Loop web client.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/config.js&lt;br /&gt;
 should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 should return the version and build string info&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com&lt;br /&gt;
 curl -I https://call.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Quick end-to-end tests:&lt;br /&gt;
 Desktop: browser to browser&lt;br /&gt;
 Desktop to FxOS&lt;br /&gt;
 FxOS to Desktop&lt;br /&gt;
 Two FxOS devices&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
 Or&lt;br /&gt;
 Run a single &#039;make test&#039; command from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://msisdn.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party, so limit the check to a single run.&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Installing Loop-Server and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 git clone https://github.com/mozilla-services/loop-server.git&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 npm install&lt;br /&gt;
 ulimit -S -n 2048&lt;br /&gt;
 npm test *&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make build&lt;br /&gt;
 make test&lt;br /&gt;
 &lt;br /&gt;
 Coverage report can be found here:&lt;br /&gt;
 /loop-server/coverage/lcov-report/index.html&lt;br /&gt;
 &lt;br /&gt;
 * This step requires the redis server to be installed and running:&lt;br /&gt;
 Mac:&lt;br /&gt;
 brew install redis&lt;br /&gt;
 redis-server /usr/local/etc/redis.conf&lt;br /&gt;
 &lt;br /&gt;
 Ubuntu Linux:&lt;br /&gt;
 sudo apt-get install redis-server&lt;br /&gt;
 sudo /usr/bin/redis-server /etc/redis/redis.conf&lt;br /&gt;
 sudo tail -f /var/log/redis/redis-server.log&lt;br /&gt;
 &lt;br /&gt;
 RHEL Linux:&lt;br /&gt;
 Install redis from here: http://download.redis.io/releases&lt;br /&gt;
 then&lt;br /&gt;
 /usr/local/bin/redis-server /home/ec2-user/redis-2.8.9/redis.conf&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the Loop-Server.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Loop-Server in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ cd loop-server/loadtests&lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Loop-Server in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing MSISDN-Gateway and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
** Install gmp, gmp-dev or gmp-devel&lt;br /&gt;
** Install ruby (very latest), ruby-dev or ruby-devel&lt;br /&gt;
** Install gem (required for fake_dynamo)&lt;br /&gt;
** Verify that gem is in your path&lt;br /&gt;
** Install redis-server to run the unit tests&lt;br /&gt;
&lt;br /&gt;
* To install gmp&lt;br /&gt;
 sudo yum -y install gmp, gmp-devel&lt;br /&gt;
 or for Ubuntu&lt;br /&gt;
 $ wget https://ftp.gnu.org/gnu/gmp/gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ tar xvjf gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ cd gmp-6.0.0&lt;br /&gt;
 $ ./configure --prefix=/usr&lt;br /&gt;
 $ make&lt;br /&gt;
 $ make check&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
* To install ruby:&lt;br /&gt;
 sudo yum -y install ruby, ruby-devel&lt;br /&gt;
 or&lt;br /&gt;
 sudo apt-get install ruby, ruby-dev&lt;br /&gt;
 &lt;br /&gt;
 If this does not get you 1.9.3 or newer, then install manually:&lt;br /&gt;
 Example:&lt;br /&gt;
     $ wget http://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p547.tar.gz&lt;br /&gt;
     $ ./configure --prefix=/usr&lt;br /&gt;
     $ make&lt;br /&gt;
     $ sudo make install&lt;br /&gt;
     (because for rhel, the default ruby version is 1.8.x.)&lt;br /&gt;
 REF:&lt;br /&gt;
 Main: https://www.ruby-lang.org/en/downloads/&lt;br /&gt;
 Dev Tools: http://rubyinstaller.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
* To install gem:&lt;br /&gt;
 Grab rubygems from here: http://rubygems.org/pages/download&lt;br /&gt;
 cd to rubygems directory&lt;br /&gt;
 $ sudo ruby setup.rb&lt;br /&gt;
&lt;br /&gt;
* To install fake_dynamo:&lt;br /&gt;
 You should not have to install fake_dynamo since it is now part of the repo installer.&lt;br /&gt;
 But if you do:&lt;br /&gt;
 $ sudo gem install fake_dynamo&lt;br /&gt;
 REF: https://github.com/ananthakumaran/fake_dynamo&lt;br /&gt;
&lt;br /&gt;
* Install the msisdn-gateway repo:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/msisdn-gateway.git&lt;br /&gt;
 $ cd msisdn-gateway&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
 (There is a bug open about the requirement to install with &#039;sudo&#039;)&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with MSISDN-Gateway.&lt;br /&gt;
&lt;br /&gt;
* Unit testing&lt;br /&gt;
 Get redis-server installed&lt;br /&gt;
 Start the server in a separate terminal or in the background with logging active&lt;br /&gt;
 $ make test&lt;br /&gt;
 The coverage report is here: msisdn-gateway/coverage/lcov-report/index.html&lt;br /&gt;
&lt;br /&gt;
* Bugs:&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036158&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036174&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048451&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048456&lt;br /&gt;
&lt;br /&gt;
== Running the load test against MSISDN-Gateway in Stage ==&lt;br /&gt;
* Building the load tests&lt;br /&gt;
 $ cd loadtests&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* To load test the Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the MSISDN-Gateway ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json &lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users &lt;br /&gt;
&lt;br /&gt;
** For make bench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test &lt;br /&gt;
&lt;br /&gt;
** For make megabench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Broker to use for testing (leaves as defined for now - this is broker in the Loads Cluster)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel)&lt;br /&gt;
&lt;br /&gt;
* Loop-Server load test code&lt;br /&gt;
** The Loop-Server load test can not currently be configured in the code&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway load test code&lt;br /&gt;
** The MSISDN-Gateway load test can be configured in the code - see the following lines: &lt;br /&gt;
** Test server URL: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L15&lt;br /&gt;
** Error percentages: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
&lt;br /&gt;
* General REFs: &lt;br /&gt;
** https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* Loop-Server&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Custom Metrics&lt;br /&gt;
** Opened web sockets&lt;br /&gt;
** Total web sockets&lt;br /&gt;
** Bytes/websockets&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway Custom Metrics&lt;br /&gt;
** mt-flow&lt;br /&gt;
** ask-for-certificate&lt;br /&gt;
** try-wrong-code&lt;br /&gt;
** try-right-code&lt;br /&gt;
** momt-flow&lt;br /&gt;
** omxen-message-collision&lt;br /&gt;
** register&lt;br /&gt;
** unregister&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for Loop-Server (per server)&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/loop_err.log&lt;br /&gt;
** /var/log/loop_out.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /var/log/nginx/access.log&lt;br /&gt;
** /var/log/nginx/error.log &lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for MSISDN-Gateway (per server)&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable Loop-Server errors:&lt;br /&gt;
 hekad loop.stderr.log&lt;br /&gt;
 The following are acceptable:&lt;br /&gt;
 Decoder &#039;LoopServer-LoopServerDecoder&#039; error: Failed parsing&lt;br /&gt;
 Plugin &#039;AggregatorOutput&#039; error: writing to heka.shared....&lt;br /&gt;
 &lt;br /&gt;
 nginx logs:&lt;br /&gt;
 The 200s (good stuff) and 101s (websockets) are acceptable. &lt;br /&gt;
 The 499s are an artifact of the current load testing tool (V1).&lt;br /&gt;
 You should only see them at the end of the load test.&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 Any percentage of 405s, 502s, or 503s is not acceptable.&lt;br /&gt;
 &lt;br /&gt;
 Application logs:&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 See the loop_server.out.log file.&lt;br /&gt;
 &lt;br /&gt;
 /var/log/loop_err.log&lt;br /&gt;
 The following are acceptable: connect: res.on(&amp;quot;header&amp;quot;): use on-headers module directly&lt;br /&gt;
 &lt;br /&gt;
 In the Loads Cluster dashboard, watch for the following errors/failures:&lt;br /&gt;
 string indices must be integers&lt;br /&gt;
 OR&lt;br /&gt;
 No JSON object could be decoded&lt;br /&gt;
 OR&lt;br /&gt;
 &#039;hawk-session-token&#039;&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable MSISDN-Gateway errors:&lt;br /&gt;
 The updated load test does generate a certain percentage of errors:&lt;br /&gt;
 https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
 So, expect to see a predefined percentage of 204s and 400s, along with the usual 200s in the nginx access logs.&lt;br /&gt;
 The msisdn-gateway app logs should be clean with just msisdn and test data.&lt;br /&gt;
&lt;br /&gt;
== Monitoring Loop Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard: &lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Loop Server: Check the following repos:&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla-services/docs/issues&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/issues&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** and in Bugzilla for non-Verified bugs: http://mzl.la/1qPxizw&lt;br /&gt;
&lt;br /&gt;
* OPs and Infra&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Repositories and Documentation&lt;br /&gt;
** Check here: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#References&lt;br /&gt;
&lt;br /&gt;
* The QA Test Environments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments&lt;br /&gt;
&lt;br /&gt;
* Test Plans and other QA&lt;br /&gt;
** https://docs.google.com/a/mozilla.com/document/d/1xYZijHnJ1JeJhONm2AYvxSnD2tWztC16WGFyD5U_d6g/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop/Try_Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA#Server&lt;br /&gt;
** https://intranet.mozilla.org/QA/Loop/MVP&lt;br /&gt;
&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1018097</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1018097"/>
		<updated>2014-09-24T19:36:26Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Loop Server Production Environments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 Browser: Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.mozilla.com/legal/terms/&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** Sentry: https://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for loop-client-*&lt;br /&gt;
** ELB: loop-client-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** None at this time. See https://bugzilla.mozilla.org/show_bug.cgi?id=1063134&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1018095</id>
		<title>TestEngineering/Services/LoopServerLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1018095"/>
		<updated>2014-09-24T19:34:16Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Quick Verification Of Stage Deployments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 Check https://call.stage.mozaws.net/config.js&lt;br /&gt;
 Should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
 and&lt;br /&gt;
 WIP from the client team: end to end tests&lt;br /&gt;
 Also:&lt;br /&gt;
 https://call.stage.mozaws.net&lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.stage.mozaws.net/legal/terms/&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd msisdn-gateway&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Quick Verification of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment for after each Production deployment.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Then run a few &#039;make test&#039; commands from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://loop.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party server&lt;br /&gt;
 &lt;br /&gt;
 Then perform actual loop testing via desktop (Aurora/Nightly so far) and FxOS (2.1)&lt;br /&gt;
 Verify that requests and strings point to Production environments&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 should return &amp;quot;Welcome to the Loop web client.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/config.js&lt;br /&gt;
 should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 should return the version and build string info&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com&lt;br /&gt;
 curl -I https://call.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Quick end-to-end tests:&lt;br /&gt;
 Desktop: browser to browser&lt;br /&gt;
 Desktop to FxOS&lt;br /&gt;
 FxOS to Desktop&lt;br /&gt;
 Two FxOS devices&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
 Or&lt;br /&gt;
 Run a single &#039;make test&#039; command from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://msisdn.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party, so limit the check to a single run.&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Installing Loop-Server and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 git clone https://github.com/mozilla-services/loop-server.git&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 npm install&lt;br /&gt;
 ulimit -S -n 2048&lt;br /&gt;
 npm test *&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make build&lt;br /&gt;
 make test&lt;br /&gt;
 &lt;br /&gt;
 Coverage report can be found here:&lt;br /&gt;
 /loop-server/coverage/lcov-report/index.html&lt;br /&gt;
 &lt;br /&gt;
 * This step requires the redis server to be installed and running:&lt;br /&gt;
 Mac:&lt;br /&gt;
 brew install redis&lt;br /&gt;
 redis-server /usr/local/etc/redis.conf&lt;br /&gt;
 &lt;br /&gt;
 Ubuntu Linux:&lt;br /&gt;
 sudo apt-get install redis-server&lt;br /&gt;
 sudo /usr/bin/redis-server /etc/redis/redis.conf&lt;br /&gt;
 sudo tail -f /var/log/redis/redis-server.log&lt;br /&gt;
 &lt;br /&gt;
 RHEL Linux:&lt;br /&gt;
 Install redis from here: http://download.redis.io/releases&lt;br /&gt;
 then&lt;br /&gt;
 /usr/local/bin/redis-server /home/ec2-user/redis-2.8.9/redis.conf&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the Loop-Server.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Loop-Server in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ cd loop-server/loadtests&lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Loop-Server in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing MSISDN-Gateway and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
** Install gmp, gmp-dev or gmp-devel&lt;br /&gt;
** Install ruby (very latest), ruby-dev or ruby-devel&lt;br /&gt;
** Install gem (required for fake_dynamo)&lt;br /&gt;
** Verify that gem is in your path&lt;br /&gt;
** Install redis-server to run the unit tests&lt;br /&gt;
&lt;br /&gt;
* To install gmp&lt;br /&gt;
 sudo yum -y install gmp, gmp-devel&lt;br /&gt;
 or for Ubuntu&lt;br /&gt;
 $ wget https://ftp.gnu.org/gnu/gmp/gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ tar xvjf gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ cd gmp-6.0.0&lt;br /&gt;
 $ ./configure --prefix=/usr&lt;br /&gt;
 $ make&lt;br /&gt;
 $ make check&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
* To install ruby:&lt;br /&gt;
 sudo yum -y install ruby, ruby-devel&lt;br /&gt;
 or&lt;br /&gt;
 sudo apt-get install ruby, ruby-dev&lt;br /&gt;
 &lt;br /&gt;
 If this does not get you 1.9.3 or newer, then install manually:&lt;br /&gt;
 Example:&lt;br /&gt;
     $ wget http://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p547.tar.gz&lt;br /&gt;
     $ ./configure --prefix=/usr&lt;br /&gt;
     $ make&lt;br /&gt;
     $ sudo make install&lt;br /&gt;
     (because for rhel, the default ruby version is 1.8.x.)&lt;br /&gt;
 REF:&lt;br /&gt;
 Main: https://www.ruby-lang.org/en/downloads/&lt;br /&gt;
 Dev Tools: http://rubyinstaller.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
* To install gem:&lt;br /&gt;
 Grab rubygems from here: http://rubygems.org/pages/download&lt;br /&gt;
 cd to rubygems directory&lt;br /&gt;
 $ sudo ruby setup.rb&lt;br /&gt;
&lt;br /&gt;
* To install fake_dynamo:&lt;br /&gt;
 You should not have to install fake_dynamo since it is now part of the repo installer.&lt;br /&gt;
 But if you do:&lt;br /&gt;
 $ sudo gem install fake_dynamo&lt;br /&gt;
 REF: https://github.com/ananthakumaran/fake_dynamo&lt;br /&gt;
&lt;br /&gt;
* Install the msisdn-gateway repo:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/msisdn-gateway.git&lt;br /&gt;
 $ cd msisdn-gateway&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
 (There is a bug open about the requirement to install with &#039;sudo&#039;)&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with MSISDN-Gateway.&lt;br /&gt;
&lt;br /&gt;
* Unit testing&lt;br /&gt;
 Get redis-server installed&lt;br /&gt;
 Start the server in a separate terminal or in the background with logging active&lt;br /&gt;
 $ make test&lt;br /&gt;
 The coverage report is here: msisdn-gateway/coverage/lcov-report/index.html&lt;br /&gt;
&lt;br /&gt;
* Bugs:&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036158&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036174&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048451&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048456&lt;br /&gt;
&lt;br /&gt;
== Running the load test against MSISDN-Gateway in Stage ==&lt;br /&gt;
* Building the load tests&lt;br /&gt;
 $ cd loadtests&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* To load test the Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the MSISDN-Gateway ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json &lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users &lt;br /&gt;
&lt;br /&gt;
** For make bench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test &lt;br /&gt;
&lt;br /&gt;
** For make megabench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Broker to use for testing (leaves as defined for now - this is broker in the Loads Cluster)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel)&lt;br /&gt;
&lt;br /&gt;
* Loop-Server load test code&lt;br /&gt;
** The Loop-Server load test can not currently be configured in the code&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway load test code&lt;br /&gt;
** The MSISDN-Gateway load test can be configured in the code - see the following lines: &lt;br /&gt;
** Test server URL: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L15&lt;br /&gt;
** Error percentages: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
&lt;br /&gt;
* General REFs: &lt;br /&gt;
** https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* Loop-Server&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Custom Metrics&lt;br /&gt;
** Opened web sockets&lt;br /&gt;
** Total web sockets&lt;br /&gt;
** Bytes/websockets&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway Custom Metrics&lt;br /&gt;
** mt-flow&lt;br /&gt;
** ask-for-certificate&lt;br /&gt;
** try-wrong-code&lt;br /&gt;
** try-right-code&lt;br /&gt;
** momt-flow&lt;br /&gt;
** omxen-message-collision&lt;br /&gt;
** register&lt;br /&gt;
** unregister&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for Loop-Server (per server)&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/loop_err.log&lt;br /&gt;
** /var/log/loop_out.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /var/log/nginx/access.log&lt;br /&gt;
** /var/log/nginx/error.log &lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for MSISDN-Gateway (per server)&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable Loop-Server errors:&lt;br /&gt;
 hekad loop.stderr.log&lt;br /&gt;
 The following are acceptable:&lt;br /&gt;
 Decoder &#039;LoopServer-LoopServerDecoder&#039; error: Failed parsing&lt;br /&gt;
 Plugin &#039;AggregatorOutput&#039; error: writing to heka.shared....&lt;br /&gt;
 &lt;br /&gt;
 nginx logs:&lt;br /&gt;
 The 200s (good stuff) and 101s (websockets) are acceptable. &lt;br /&gt;
 The 499s are an artifact of the current load testing tool (V1).&lt;br /&gt;
 You should only see them at the end of the load test.&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 Any percentage of 405s, 502s, or 503s is not acceptable.&lt;br /&gt;
 &lt;br /&gt;
 Application logs:&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 See the loop_server.out.log file.&lt;br /&gt;
 &lt;br /&gt;
 /var/log/loop_err.log&lt;br /&gt;
 The following are acceptable: connect: res.on(&amp;quot;header&amp;quot;): use on-headers module directly&lt;br /&gt;
 &lt;br /&gt;
 In the Loads Cluster dashboard, watch for the following errors/failures:&lt;br /&gt;
 string indices must be integers&lt;br /&gt;
 OR&lt;br /&gt;
 No JSON object could be decoded&lt;br /&gt;
 OR&lt;br /&gt;
 &#039;hawk-session-token&#039;&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable MSISDN-Gateway errors:&lt;br /&gt;
 The updated load test does generate a certain percentage of errors:&lt;br /&gt;
 https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
 So, expect to see a predefined percentage of 204s and 400s, along with the usual 200s in the nginx access logs.&lt;br /&gt;
 The msisdn-gateway app logs should be clean with just msisdn and test data.&lt;br /&gt;
&lt;br /&gt;
== Monitoring Loop Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard: &lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Loop Server: Check the following repos:&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla-services/docs/issues&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/issues&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** and in Bugzilla for non-Verified bugs: http://mzl.la/1qPxizw&lt;br /&gt;
&lt;br /&gt;
* OPs and Infra&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Repositories and Documentation&lt;br /&gt;
** Check here: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#References&lt;br /&gt;
&lt;br /&gt;
* The QA Test Environments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments&lt;br /&gt;
&lt;br /&gt;
* Test Plans and other QA&lt;br /&gt;
** https://docs.google.com/a/mozilla.com/document/d/1xYZijHnJ1JeJhONm2AYvxSnD2tWztC16WGFyD5U_d6g/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop/Try_Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA#Server&lt;br /&gt;
** https://intranet.mozilla.org/QA/Loop/MVP&lt;br /&gt;
&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1018094</id>
		<title>TestEngineering/Services/LoopServerLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1018094"/>
		<updated>2014-09-24T19:33:22Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Quick Verification Of Stage Deployments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 Check https://call.stage.mozaws.net/config.js&lt;br /&gt;
 Should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
 and&lt;br /&gt;
 WIP from the client team: end to end tests&lt;br /&gt;
 Also:&lt;br /&gt;
 https://call.stage.mozaws.net&lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.mozilla.com/legal/terms&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd msisdn-gateway&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Quick Verification of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment for after each Production deployment.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Then run a few &#039;make test&#039; commands from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://loop.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party server&lt;br /&gt;
 &lt;br /&gt;
 Then perform actual loop testing via desktop (Aurora/Nightly so far) and FxOS (2.1)&lt;br /&gt;
 Verify that requests and strings point to Production environments&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 should return &amp;quot;Welcome to the Loop web client.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/config.js&lt;br /&gt;
 should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 should return the version and build string info&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com&lt;br /&gt;
 curl -I https://call.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Quick end-to-end tests:&lt;br /&gt;
 Desktop: browser to browser&lt;br /&gt;
 Desktop to FxOS&lt;br /&gt;
 FxOS to Desktop&lt;br /&gt;
 Two FxOS devices&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
 Or&lt;br /&gt;
 Run a single &#039;make test&#039; command from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://msisdn.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party, so limit the check to a single run.&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Installing Loop-Server and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 git clone https://github.com/mozilla-services/loop-server.git&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 npm install&lt;br /&gt;
 ulimit -S -n 2048&lt;br /&gt;
 npm test *&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make build&lt;br /&gt;
 make test&lt;br /&gt;
 &lt;br /&gt;
 Coverage report can be found here:&lt;br /&gt;
 /loop-server/coverage/lcov-report/index.html&lt;br /&gt;
 &lt;br /&gt;
 * This step requires the redis server to be installed and running:&lt;br /&gt;
 Mac:&lt;br /&gt;
 brew install redis&lt;br /&gt;
 redis-server /usr/local/etc/redis.conf&lt;br /&gt;
 &lt;br /&gt;
 Ubuntu Linux:&lt;br /&gt;
 sudo apt-get install redis-server&lt;br /&gt;
 sudo /usr/bin/redis-server /etc/redis/redis.conf&lt;br /&gt;
 sudo tail -f /var/log/redis/redis-server.log&lt;br /&gt;
 &lt;br /&gt;
 RHEL Linux:&lt;br /&gt;
 Install redis from here: http://download.redis.io/releases&lt;br /&gt;
 then&lt;br /&gt;
 /usr/local/bin/redis-server /home/ec2-user/redis-2.8.9/redis.conf&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the Loop-Server.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Loop-Server in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ cd loop-server/loadtests&lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Loop-Server in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing MSISDN-Gateway and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
** Install gmp, gmp-dev or gmp-devel&lt;br /&gt;
** Install ruby (very latest), ruby-dev or ruby-devel&lt;br /&gt;
** Install gem (required for fake_dynamo)&lt;br /&gt;
** Verify that gem is in your path&lt;br /&gt;
** Install redis-server to run the unit tests&lt;br /&gt;
&lt;br /&gt;
* To install gmp&lt;br /&gt;
 sudo yum -y install gmp, gmp-devel&lt;br /&gt;
 or for Ubuntu&lt;br /&gt;
 $ wget https://ftp.gnu.org/gnu/gmp/gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ tar xvjf gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ cd gmp-6.0.0&lt;br /&gt;
 $ ./configure --prefix=/usr&lt;br /&gt;
 $ make&lt;br /&gt;
 $ make check&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
* To install ruby:&lt;br /&gt;
 sudo yum -y install ruby, ruby-devel&lt;br /&gt;
 or&lt;br /&gt;
 sudo apt-get install ruby, ruby-dev&lt;br /&gt;
 &lt;br /&gt;
 If this does not get you 1.9.3 or newer, then install manually:&lt;br /&gt;
 Example:&lt;br /&gt;
     $ wget http://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p547.tar.gz&lt;br /&gt;
     $ ./configure --prefix=/usr&lt;br /&gt;
     $ make&lt;br /&gt;
     $ sudo make install&lt;br /&gt;
     (because for rhel, the default ruby version is 1.8.x.)&lt;br /&gt;
 REF:&lt;br /&gt;
 Main: https://www.ruby-lang.org/en/downloads/&lt;br /&gt;
 Dev Tools: http://rubyinstaller.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
* To install gem:&lt;br /&gt;
 Grab rubygems from here: http://rubygems.org/pages/download&lt;br /&gt;
 cd to rubygems directory&lt;br /&gt;
 $ sudo ruby setup.rb&lt;br /&gt;
&lt;br /&gt;
* To install fake_dynamo:&lt;br /&gt;
 You should not have to install fake_dynamo since it is now part of the repo installer.&lt;br /&gt;
 But if you do:&lt;br /&gt;
 $ sudo gem install fake_dynamo&lt;br /&gt;
 REF: https://github.com/ananthakumaran/fake_dynamo&lt;br /&gt;
&lt;br /&gt;
* Install the msisdn-gateway repo:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/msisdn-gateway.git&lt;br /&gt;
 $ cd msisdn-gateway&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
 (There is a bug open about the requirement to install with &#039;sudo&#039;)&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with MSISDN-Gateway.&lt;br /&gt;
&lt;br /&gt;
* Unit testing&lt;br /&gt;
 Get redis-server installed&lt;br /&gt;
 Start the server in a separate terminal or in the background with logging active&lt;br /&gt;
 $ make test&lt;br /&gt;
 The coverage report is here: msisdn-gateway/coverage/lcov-report/index.html&lt;br /&gt;
&lt;br /&gt;
* Bugs:&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036158&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036174&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048451&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048456&lt;br /&gt;
&lt;br /&gt;
== Running the load test against MSISDN-Gateway in Stage ==&lt;br /&gt;
* Building the load tests&lt;br /&gt;
 $ cd loadtests&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* To load test the Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the MSISDN-Gateway ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json &lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users &lt;br /&gt;
&lt;br /&gt;
** For make bench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test &lt;br /&gt;
&lt;br /&gt;
** For make megabench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Broker to use for testing (leaves as defined for now - this is broker in the Loads Cluster)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel)&lt;br /&gt;
&lt;br /&gt;
* Loop-Server load test code&lt;br /&gt;
** The Loop-Server load test can not currently be configured in the code&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway load test code&lt;br /&gt;
** The MSISDN-Gateway load test can be configured in the code - see the following lines: &lt;br /&gt;
** Test server URL: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L15&lt;br /&gt;
** Error percentages: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
&lt;br /&gt;
* General REFs: &lt;br /&gt;
** https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* Loop-Server&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Custom Metrics&lt;br /&gt;
** Opened web sockets&lt;br /&gt;
** Total web sockets&lt;br /&gt;
** Bytes/websockets&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway Custom Metrics&lt;br /&gt;
** mt-flow&lt;br /&gt;
** ask-for-certificate&lt;br /&gt;
** try-wrong-code&lt;br /&gt;
** try-right-code&lt;br /&gt;
** momt-flow&lt;br /&gt;
** omxen-message-collision&lt;br /&gt;
** register&lt;br /&gt;
** unregister&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for Loop-Server (per server)&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/loop_err.log&lt;br /&gt;
** /var/log/loop_out.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /var/log/nginx/access.log&lt;br /&gt;
** /var/log/nginx/error.log &lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for MSISDN-Gateway (per server)&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable Loop-Server errors:&lt;br /&gt;
 hekad loop.stderr.log&lt;br /&gt;
 The following are acceptable:&lt;br /&gt;
 Decoder &#039;LoopServer-LoopServerDecoder&#039; error: Failed parsing&lt;br /&gt;
 Plugin &#039;AggregatorOutput&#039; error: writing to heka.shared....&lt;br /&gt;
 &lt;br /&gt;
 nginx logs:&lt;br /&gt;
 The 200s (good stuff) and 101s (websockets) are acceptable. &lt;br /&gt;
 The 499s are an artifact of the current load testing tool (V1).&lt;br /&gt;
 You should only see them at the end of the load test.&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 Any percentage of 405s, 502s, or 503s is not acceptable.&lt;br /&gt;
 &lt;br /&gt;
 Application logs:&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 See the loop_server.out.log file.&lt;br /&gt;
 &lt;br /&gt;
 /var/log/loop_err.log&lt;br /&gt;
 The following are acceptable: connect: res.on(&amp;quot;header&amp;quot;): use on-headers module directly&lt;br /&gt;
 &lt;br /&gt;
 In the Loads Cluster dashboard, watch for the following errors/failures:&lt;br /&gt;
 string indices must be integers&lt;br /&gt;
 OR&lt;br /&gt;
 No JSON object could be decoded&lt;br /&gt;
 OR&lt;br /&gt;
 &#039;hawk-session-token&#039;&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable MSISDN-Gateway errors:&lt;br /&gt;
 The updated load test does generate a certain percentage of errors:&lt;br /&gt;
 https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
 So, expect to see a predefined percentage of 204s and 400s, along with the usual 200s in the nginx access logs.&lt;br /&gt;
 The msisdn-gateway app logs should be clean with just msisdn and test data.&lt;br /&gt;
&lt;br /&gt;
== Monitoring Loop Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard: &lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Loop Server: Check the following repos:&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla-services/docs/issues&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/issues&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** and in Bugzilla for non-Verified bugs: http://mzl.la/1qPxizw&lt;br /&gt;
&lt;br /&gt;
* OPs and Infra&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Repositories and Documentation&lt;br /&gt;
** Check here: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#References&lt;br /&gt;
&lt;br /&gt;
* The QA Test Environments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments&lt;br /&gt;
&lt;br /&gt;
* Test Plans and other QA&lt;br /&gt;
** https://docs.google.com/a/mozilla.com/document/d/1xYZijHnJ1JeJhONm2AYvxSnD2tWztC16WGFyD5U_d6g/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop/Try_Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA#Server&lt;br /&gt;
** https://intranet.mozilla.org/QA/Loop/MVP&lt;br /&gt;
&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1018093</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1018093"/>
		<updated>2014-09-24T19:32:56Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Loop Server Production Environments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 Browser: Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 and now the TOS: https://call.mozilla.com/legal/terms&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** Sentry: https://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for loop-client-*&lt;br /&gt;
** ELB: loop-client-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** None at this time. See https://bugzilla.mozilla.org/show_bug.cgi?id=1063134&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1018092</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1018092"/>
		<updated>2014-09-24T19:30:23Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Loop Server Production Environments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 Browser: Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
 and now the TOS: https://call.mozilla.com/legal/terms&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** Sentry: https://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for loop-client-*&lt;br /&gt;
** ELB: loop-client-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** None at this time. See https://bugzilla.mozilla.org/show_bug.cgi?id=1063134&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1018089</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1018089"/>
		<updated>2014-09-24T19:20:17Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Loop Client Stage Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 Browser: Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** Sentry: https://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for loop-client-*&lt;br /&gt;
** ELB: loop-client-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** especially /data/loop-client/content/config.js&lt;br /&gt;
*** Note: this does not contain any app-specific config file in the config directory&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** None at this time. See https://bugzilla.mozilla.org/show_bug.cgi?id=1063134&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1018087</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1018087"/>
		<updated>2014-09-24T19:15:45Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Loop Client Stage Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 Browser: Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** Sentry: https://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for loop-client-*&lt;br /&gt;
** ELB: loop-client-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
*** Note: this does not contain any app-specific config file&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml&lt;br /&gt;
*** especially the following files&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** None at this time. See https://bugzilla.mozilla.org/show_bug.cgi?id=1063134&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TokenServerAndSyncLoadTesting&amp;diff=1016683</id>
		<title>TestEngineering/Services/TokenServerAndSyncLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TokenServerAndSyncLoadTesting&amp;diff=1016683"/>
		<updated>2014-09-19T22:56:52Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Debugging the Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* NOTE: We currently have two Verifier stacks in Stage (and probably Production):&lt;br /&gt;
** The standalone Browser_ID Verifier stack: See that Verifier sections below...&lt;br /&gt;
** A Tokenserver+Verifier stack: See the TokenServer sections below...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
&lt;br /&gt;
* TokenServer+Verifier Stage environment:&lt;br /&gt;
 From the browser: https://token.stage.mozaws.net&lt;br /&gt;
 curl https://token.stage.mozaws.net&lt;br /&gt;
 curl -I https://token.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of tokenserver on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Alternate method:&lt;br /&gt;
 Use the test tool from here: https://github.com/edmoz/fxa-sync-client&lt;br /&gt;
 Install and check all collection types for a known account in Stage:&lt;br /&gt;
 bin/sync-cli.js -e EMAIL -p PASSWORD --env stage -t COLLECTION&lt;br /&gt;
     where -t is one of bookmarks,history,passwords,tabs,addons,prefs,forms&lt;br /&gt;
&lt;br /&gt;
* Verifier Stage environment:&lt;br /&gt;
 In the browser: https://verifier.stage.mozaws.net/&lt;br /&gt;
 curl https://verifier.stage.mozaws.net&lt;br /&gt;
 curl -I https://verifier.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of browserid-verifier on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Sync Server Stage environment:&lt;br /&gt;
 Install server-syncstorage to the local host or AWS instance (see below)&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 Quick test against the TokenServer&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py --use-token-server &amp;lt;Stage TokenServer&amp;gt;&lt;br /&gt;
 Current example:&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py --use-token-server &lt;br /&gt;
     https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
 Quick tests against the Sync nodes&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &amp;lt;Stage Sync Node&amp;gt;#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 Current examples:&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 Get the Node Secret information from OPs&lt;br /&gt;
&lt;br /&gt;
* Using TPS&lt;br /&gt;
** The TPS FxA/Sync automated tests can be used as well, but the following file will have to be edited to add Stage environment configuration parameters: https://github.com/mozilla/gecko-dev/blob/master/testing/tps/tps/testrunner.py&lt;br /&gt;
** See the following wiki page for more information: https://wiki.mozilla.org/User_Services/Sync/Run_TPS&lt;br /&gt;
** See also: https://bugzilla.mozilla.org/show_bug.cgi?id=1006675&lt;br /&gt;
&lt;br /&gt;
== Quick Verification Of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment after a new deployment.&lt;br /&gt;
&lt;br /&gt;
* Tokenserver+Verifier Production Environment&lt;br /&gt;
 In the browser: https://token.services.mozilla.com&lt;br /&gt;
 curl https://token.services.mozilla.com&lt;br /&gt;
 curl -I https://token.services.mozilla.com&lt;br /&gt;
 Then:&lt;br /&gt;
 Use the test tool from here: https://github.com/edmoz/fxa-sync-client&lt;br /&gt;
 Install and check all collection types for a known account in Production:&lt;br /&gt;
 bin/sync-cli.js -e PROD-EMAIL -p PASSWORD -t COLLECTION&lt;br /&gt;
     where -t is one of bookmarks,history,passwords,tabs,addons,prefs,forms&lt;br /&gt;
&lt;br /&gt;
* Verifier Production Environment&lt;br /&gt;
 In the browser: https://verifier.accounts.firefox.com&lt;br /&gt;
 curl https://verifier.accounts.firefox.com&lt;br /&gt;
 curl -I https://verifier.accounts.firefox.com&lt;br /&gt;
 Then:&lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of browserid-verifier on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* Sync Server Stage environment&lt;br /&gt;
 Sign in with a known FxA account and sync data with a current Production account (sync node).&lt;br /&gt;
 Create a new FxA account and set up sync.&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#Loads_Services_Cluster_Environment&lt;br /&gt;
&lt;br /&gt;
== Installing BrowserID-Verifier and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 $ git clone git://github.com/mozilla/browserid-verifier&lt;br /&gt;
 $ cd browserid-verifier&lt;br /&gt;
 $ npm install&lt;br /&gt;
 $ npm test&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
      Note: This should hit Stage by default: SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the verifier.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Verifier in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://verifier.stage.mozaws.net	&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: The Stage Verifier hits the Stage mockmyid server&lt;br /&gt;
&lt;br /&gt;
* Production environment: &lt;br /&gt;
 $ make test SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
 $ make bench SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Verifier ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=TBD&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing TokenServer+Verifier and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/tokenserver&lt;br /&gt;
 $ cd tokenserver&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ make test&lt;br /&gt;
     Note: This is for local testing only&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
     Note: This should hit Prod by default: SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with TokenServer+Verifier.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against TokenServer+Verifier in Stage ==&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://token.stage.mozaws.net		&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: This also hits the Stage Verifier, which in turns hits the Stage mockmyid server&lt;br /&gt;
&lt;br /&gt;
* And while we are at it...&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 $ make bench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 $ make bench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for TokenServer+Verifier ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/tokenserver/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing Sync 1.5 and the Loads tool on Localhost or AWS ==&lt;br /&gt;
 Installation:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/server-syncstorage/&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ make test&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with Sync 1.5.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against Sync 1.5 in Stage ==&lt;br /&gt;
* Loads against specific Sync nodes in Stage&lt;br /&gt;
 $ make test SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
 $ make bench SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
 Sync Stage nodes:&lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net&lt;br /&gt;
     https://sync-2-us-east-1.stage.mozaws.net&lt;br /&gt;
     https://sync-3-us-east-1.stage.mozaws.net&lt;br /&gt;
     ...etc...&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 &lt;br /&gt;
 NOTE: The OPs team has the SECRET string for Stage. Get it from them before you start testing.&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for Sync 1.5 in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Running a combined load test against TokenServer+Verifier and Sync 1.5 in Stage ==&lt;br /&gt;
* A combined loads test against TokenServer and Sync 1.5 in Stage&lt;br /&gt;
* This is done via the server-syncstorage directory that was cloned and built above&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make test SERVER_URL=https://your.tokenserver.here&lt;br /&gt;
 $ make bench SERVER_URL=https://your.tokenserver.here&lt;br /&gt;
 &lt;br /&gt;
 Examples for Stage:&lt;br /&gt;
 $ make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 See https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#TokenServer.2BVerifier_Stage_Environment&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: The Stage Tokenserver hits the Stage Verifier, which, in turn, hits the mockmyid server.&lt;br /&gt;
&lt;br /&gt;
* And while we are at it...&lt;br /&gt;
 Dev environment:&lt;br /&gt;
 Examples:&lt;br /&gt;
 $ make test SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 $ make bench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 &lt;br /&gt;
 Prod environment:&lt;br /&gt;
 Examples:&lt;br /&gt;
 $ make test SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 $ make bench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 See https://wiki.mozilla.org/QA/Services/FxATestEnvironments#FxA.2C_TokenServer.2C_and_Sync_Production_Environments&lt;br /&gt;
 and https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#TokenServer_and_Sync_1.5_Dev_Environments&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for a combined load test in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Prod environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (BrowserID-Verifier, TokenServer, Sync, Combined):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
&lt;br /&gt;
** For make bench (BrowserID-Verifier, TokenServer, Sync, Combined):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
&lt;br /&gt;
** For make megabench (using the LoadsCluster with BrowserID-Verifier, TokenSerer, Sync, Combined):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel) &lt;br /&gt;
*** SSH (the user account needed to SSH into the loads cluster - the default is ubuntu)&lt;br /&gt;
&lt;br /&gt;
* Tokenserver load test code&lt;br /&gt;
** The Tokenserver load test can be configured - see the following lines:&lt;br /&gt;
** Basic Settings: https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** MockMyID: https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L19-L36&lt;br /&gt;
** Percentages: https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L39-L51&lt;br /&gt;
&lt;br /&gt;
* Verifier load test code&lt;br /&gt;
** The Verifier load test can be configured - see the following lines:&lt;br /&gt;
** Various settings: https://github.com/mozilla/browserid-verifier/blob/master/loadtest/loadtest.py#L13-L53&lt;br /&gt;
&lt;br /&gt;
* Sync Server load test code&lt;br /&gt;
** The Sync Server load test can be configured - see the following lines:&lt;br /&gt;
** Setting MockMyID: https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py#L26-L45&lt;br /&gt;
** Setting test distributions: https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py#L48-L83&lt;br /&gt;
&lt;br /&gt;
* REFs: &lt;br /&gt;
** https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/blob/master/loadtest/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* TokenServer&lt;br /&gt;
** File location: tokenserver/loadtest/loadtest.py&lt;br /&gt;
** Inside NoteAssignmentTest, test_realistic is the main load test; the others are for specific behaviors&lt;br /&gt;
** The test runs as following:&lt;br /&gt;
 95% ask for assertions on existing users (on a DB filled by test_single_token_exchange)&lt;br /&gt;
 4% ask for assertion on a new use&lt;br /&gt;
 1% ask for a bad assertion&lt;br /&gt;
** A bug has been filed to get the following additional coverage for the load test:&lt;br /&gt;
*** generation numbers in assertion&lt;br /&gt;
*** client state string&lt;br /&gt;
** A bug has been filed to get some integration tests written:&lt;br /&gt;
*** to cover the edge/error cases not in the load test&lt;br /&gt;
*** to be pointed at a remote server&lt;br /&gt;
&lt;br /&gt;
* Sync&lt;br /&gt;
** File location: server-syncstorage/loadtest/stress.py&lt;br /&gt;
** This is the Sync 2.0 load test that has been back-ported for Sync 1.5.&lt;br /&gt;
** The stress.py file is fully configurable for the following:&lt;br /&gt;
*** client probability&lt;br /&gt;
*** client distribution&lt;br /&gt;
*** collections&lt;br /&gt;
** A bug has been filed to add support for load testing tabs&lt;br /&gt;
*** The tab collection it uses memcache; we need to figure out a way to test it without overloading the server&lt;br /&gt;
** There are currently no constants to define how to select percentages per collection type&lt;br /&gt;
** Right now, we need to manually configure the collections list in stress.py:&lt;br /&gt;
*** collections = [&#039;bookmarks&#039;, &#039;forms&#039;, &#039;passwords&#039;, &#039;history&#039;, &#039;prefs&#039;]&lt;br /&gt;
*** Basically, you can add more entries of each type, since the load test (per user/again/hit/pass) picks randomly from the list for any given request...&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Tokenserver Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* Verifier Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* Sync Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for TokenServer (per server)&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.log.*&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.error.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stdout.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stderr.log&lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for Verifier (per server)&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/squid/access.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stderr.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stdout.log &lt;br /&gt;
&lt;br /&gt;
* 3. Important error logs for Sync (per Sync node)&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/nginx/access.log&lt;br /&gt;
** /media/ephemeral0/error.log&lt;br /&gt;
** /media/ephemeral0/sync/sync.err&lt;br /&gt;
** /media/ephemeral0/sync/sync.log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Acceptable TokenServer errors:&lt;br /&gt;
 1% - 2% failures (as the following)&lt;br /&gt;
 token.log:&lt;br /&gt;
 &amp;quot;name&amp;quot;: &amp;quot;token.assertion.invalid_signature_error&amp;quot;&lt;br /&gt;
 &amp;quot;name&amp;quot;: &amp;quot;token.assertion.verify_failure&amp;quot;&lt;br /&gt;
 nginx access.log:&lt;br /&gt;
 401s&lt;br /&gt;
 NOTE: Values can be tweaked here:&lt;br /&gt;
     https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L58-L60&lt;br /&gt;
 &lt;br /&gt;
 The following types of errors are known:&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
     Exception KeyError: KeyError(49564400,) in &amp;lt;module &#039;threading&#039;...&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.log&lt;br /&gt;
     ...&amp;quot;Starting new HTTP connection (9): 127.0.0.1&amp;quot;, &amp;quot;hostname&amp;quot;: ...&lt;br /&gt;
     {&amp;quot;error&amp;quot;: &amp;quot;StopIteration()&amp;quot;, &amp;quot;traceback&amp;quot;: &amp;quot;Uncaught exception:\n  &lt;br /&gt;
     File \&amp;quot;/data/tokenserver/local/lib/python2.6/site-packages/gunicorn/workers/async.py\&amp;quot;...&lt;br /&gt;
     ...&amp;quot;Connection pool is full, discarding connection: 127.0.0.1&amp;quot;, &amp;quot;...&lt;br /&gt;
 Also, any 499s are probably an artifact of the current (V1) load test.&lt;br /&gt;
 REF:&lt;br /&gt;
 https://bugzilla.mozilla.org/show_bug.cgi?id=1040396&lt;br /&gt;
 https://bugzilla.mozilla.org/show_bug.cgi?id=1040397&lt;br /&gt;
 &lt;br /&gt;
 OLD: Also, it may be the case that the following errors are &amp;quot;acceptable&amp;quot; if TS Stage is larger than Verifier Stage:&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
 Verifier-related errors of these types:&lt;br /&gt;
 &amp;quot;HttpConnectionPool is full, discarding connection: verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
 &amp;quot;Resetting dropped connection: verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
 &amp;quot;Starting new HTTPS connection (179): verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Acceptable Verifier errors:&lt;br /&gt;
 The verifier_out.log will show errors of the following types:&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;untrusted issuer...&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;expired&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;algorithms do not match&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;audience mismatch: scheme mismatch&#039;&lt;br /&gt;
 Also, any 499s in the nginx logs are probably an artifact of the current (V1) load test.&lt;br /&gt;
&lt;br /&gt;
* Acceptable Sync node errors:&lt;br /&gt;
 In the nginx access.log files:&lt;br /&gt;
 We will see some percentage of 404s. Right now we see the following:&lt;br /&gt;
     14% 404s (compared to the total count of 200s)&lt;br /&gt;
     with the config set up as follows:&lt;br /&gt;
          users = 20&lt;br /&gt;
          duration = 1800&lt;br /&gt;
          agents = 5&lt;br /&gt;
 Ideally, the overall percentage of 404s should drop the longer the load test.&lt;br /&gt;
 Usually, you will not see 304s, 400s, 412s, or 415s for a load test,&lt;br /&gt;
 although they may show up in the logs after running the remote integration tests.&lt;br /&gt;
 Also, any 499s are probably an artifact of the current (V1) load test.&lt;br /&gt;
 &lt;br /&gt;
 In /var/log/hekad/sync_1_5.stderr.log&lt;br /&gt;
 You may see some Decoder &#039;Sync-1_5-SlowQuery-MySqlSlowQueryDecoder&#039; error: Failed parsing&lt;br /&gt;
 and a lot of BSO INSERTs&lt;br /&gt;
 &lt;br /&gt;
 In /media/ephemeral0/logs/sync/sync.err&lt;br /&gt;
 You should see expected skew and QueuePool messages and Deprecation warnings&lt;br /&gt;
 Also, these are known&lt;br /&gt;
 Exception SystemExit&lt;br /&gt;
 Exception KeyError&lt;br /&gt;
 This is probably https://bugzilla.mozilla.org/show_bug.cgi?id=1040397&lt;br /&gt;
&lt;br /&gt;
== Monitoring TS and Sync Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard:&lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Tokenserver: &lt;br /&gt;
** Repo: https://github.com/mozilla-services/tokenserver/issues &lt;br /&gt;
** Bugzilla: http://mzl.la/1s4qZKn&lt;br /&gt;
&lt;br /&gt;
* BrowserID-Verifier:&lt;br /&gt;
** Repo: https://github.com/mozilla/browserid-verifier/issues&lt;br /&gt;
** Bugzilla: no specific cateogory&lt;br /&gt;
&lt;br /&gt;
* Sync:&lt;br /&gt;
** Repo: https://github.com/mozilla-services/server-syncstorage/issues&lt;br /&gt;
** Bugzilla: http://mzl.la/VUrYQ5&lt;br /&gt;
&lt;br /&gt;
* OPs and Infrastructure&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Other URLs&lt;br /&gt;
** http://restmail.net&lt;br /&gt;
** https://mockmyid.com&lt;br /&gt;
* Repositories&lt;br /&gt;
** https://github.com/mozilla-services/tokenserver&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier&lt;br /&gt;
** https://github.com/mozilla/browserid-local-verify&lt;br /&gt;
** https://github.com/callahad/mockmyid&lt;br /&gt;
** https://github.com/mozilla/restmail.net&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com&lt;br /&gt;
** https://docs.services.mozilla.com/token/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Sagrada/TokenServer&lt;br /&gt;
** https://docs.services.mozilla.com/sync/&lt;br /&gt;
* The QA Test Environments: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
* Deploying the FxA Load Test environment for broker/agents usage:&lt;br /&gt;
** https://github.com/mozilla/fxa-deployment&lt;br /&gt;
* Sync 1.5 protocol, documentation, etc.&lt;br /&gt;
** https://github.com/mozilla-services/docs&lt;br /&gt;
** https://docs.services.mozilla.com/#how-to&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-fxa.html&lt;br /&gt;
** https://docs.services.mozilla.com/token/apis.html&lt;br /&gt;
** https://docs.services.mozilla.com/storage/apis-1.5.html&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-sync-1.5.html&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-sync-1.5.html&lt;br /&gt;
** https://github.com/mozilla-services/syncserver&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1016672</id>
		<title>TestEngineering/Services/LoopServerLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1016672"/>
		<updated>2014-09-19T22:30:05Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Debugging the Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 Check https://call.stage.mozaws.net/config.js&lt;br /&gt;
 Should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
 and&lt;br /&gt;
 WIP from the client team: end to end tests&lt;br /&gt;
 Also:&lt;br /&gt;
 https://call.stage.mozaws.net&lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd msisdn-gateway&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Quick Verification of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment for after each Production deployment.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Then run a few &#039;make test&#039; commands from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://loop.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party server&lt;br /&gt;
 &lt;br /&gt;
 Then perform actual loop testing via desktop (Aurora/Nightly so far) and FxOS (2.1)&lt;br /&gt;
 Verify that requests and strings point to Production environments&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 should return &amp;quot;Welcome to the Loop web client.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/config.js&lt;br /&gt;
 should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 should return the version and build string info&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com&lt;br /&gt;
 curl -I https://call.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Quick end-to-end tests:&lt;br /&gt;
 Desktop: browser to browser&lt;br /&gt;
 Desktop to FxOS&lt;br /&gt;
 FxOS to Desktop&lt;br /&gt;
 Two FxOS devices&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
 Or&lt;br /&gt;
 Run a single &#039;make test&#039; command from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://msisdn.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party, so limit the check to a single run.&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Installing Loop-Server and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 git clone https://github.com/mozilla-services/loop-server.git&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 npm install&lt;br /&gt;
 ulimit -S -n 2048&lt;br /&gt;
 npm test *&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make build&lt;br /&gt;
 make test&lt;br /&gt;
 &lt;br /&gt;
 Coverage report can be found here:&lt;br /&gt;
 /loop-server/coverage/lcov-report/index.html&lt;br /&gt;
 &lt;br /&gt;
 * This step requires the redis server to be installed and running:&lt;br /&gt;
 Mac:&lt;br /&gt;
 brew install redis&lt;br /&gt;
 redis-server /usr/local/etc/redis.conf&lt;br /&gt;
 &lt;br /&gt;
 Ubuntu Linux:&lt;br /&gt;
 sudo apt-get install redis-server&lt;br /&gt;
 sudo /usr/bin/redis-server /etc/redis/redis.conf&lt;br /&gt;
 sudo tail -f /var/log/redis/redis-server.log&lt;br /&gt;
 &lt;br /&gt;
 RHEL Linux:&lt;br /&gt;
 Install redis from here: http://download.redis.io/releases&lt;br /&gt;
 then&lt;br /&gt;
 /usr/local/bin/redis-server /home/ec2-user/redis-2.8.9/redis.conf&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the Loop-Server.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Loop-Server in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ cd loop-server/loadtests&lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Loop-Server in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing MSISDN-Gateway and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
** Install gmp, gmp-dev or gmp-devel&lt;br /&gt;
** Install ruby (very latest), ruby-dev or ruby-devel&lt;br /&gt;
** Install gem (required for fake_dynamo)&lt;br /&gt;
** Verify that gem is in your path&lt;br /&gt;
** Install redis-server to run the unit tests&lt;br /&gt;
&lt;br /&gt;
* To install gmp&lt;br /&gt;
 sudo yum -y install gmp, gmp-devel&lt;br /&gt;
 or for Ubuntu&lt;br /&gt;
 $ wget https://ftp.gnu.org/gnu/gmp/gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ tar xvjf gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ cd gmp-6.0.0&lt;br /&gt;
 $ ./configure --prefix=/usr&lt;br /&gt;
 $ make&lt;br /&gt;
 $ make check&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
* To install ruby:&lt;br /&gt;
 sudo yum -y install ruby, ruby-devel&lt;br /&gt;
 or&lt;br /&gt;
 sudo apt-get install ruby, ruby-dev&lt;br /&gt;
 &lt;br /&gt;
 If this does not get you 1.9.3 or newer, then install manually:&lt;br /&gt;
 Example:&lt;br /&gt;
     $ wget http://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p547.tar.gz&lt;br /&gt;
     $ ./configure --prefix=/usr&lt;br /&gt;
     $ make&lt;br /&gt;
     $ sudo make install&lt;br /&gt;
     (because for rhel, the default ruby version is 1.8.x.)&lt;br /&gt;
 REF:&lt;br /&gt;
 Main: https://www.ruby-lang.org/en/downloads/&lt;br /&gt;
 Dev Tools: http://rubyinstaller.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
* To install gem:&lt;br /&gt;
 Grab rubygems from here: http://rubygems.org/pages/download&lt;br /&gt;
 cd to rubygems directory&lt;br /&gt;
 $ sudo ruby setup.rb&lt;br /&gt;
&lt;br /&gt;
* To install fake_dynamo:&lt;br /&gt;
 You should not have to install fake_dynamo since it is now part of the repo installer.&lt;br /&gt;
 But if you do:&lt;br /&gt;
 $ sudo gem install fake_dynamo&lt;br /&gt;
 REF: https://github.com/ananthakumaran/fake_dynamo&lt;br /&gt;
&lt;br /&gt;
* Install the msisdn-gateway repo:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/msisdn-gateway.git&lt;br /&gt;
 $ cd msisdn-gateway&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
 (There is a bug open about the requirement to install with &#039;sudo&#039;)&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with MSISDN-Gateway.&lt;br /&gt;
&lt;br /&gt;
* Unit testing&lt;br /&gt;
 Get redis-server installed&lt;br /&gt;
 Start the server in a separate terminal or in the background with logging active&lt;br /&gt;
 $ make test&lt;br /&gt;
 The coverage report is here: msisdn-gateway/coverage/lcov-report/index.html&lt;br /&gt;
&lt;br /&gt;
* Bugs:&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036158&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036174&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048451&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048456&lt;br /&gt;
&lt;br /&gt;
== Running the load test against MSISDN-Gateway in Stage ==&lt;br /&gt;
* Building the load tests&lt;br /&gt;
 $ cd loadtests&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* To load test the Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the MSISDN-Gateway ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json &lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users &lt;br /&gt;
&lt;br /&gt;
** For make bench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test &lt;br /&gt;
&lt;br /&gt;
** For make megabench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Broker to use for testing (leaves as defined for now - this is broker in the Loads Cluster)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel)&lt;br /&gt;
&lt;br /&gt;
* Loop-Server load test code&lt;br /&gt;
** The Loop-Server load test can not currently be configured in the code&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway load test code&lt;br /&gt;
** The MSISDN-Gateway load test can be configured in the code - see the following lines: &lt;br /&gt;
** Test server URL: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L15&lt;br /&gt;
** Error percentages: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
&lt;br /&gt;
* General REFs: &lt;br /&gt;
** https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* Loop-Server&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Custom Metrics&lt;br /&gt;
** Opened web sockets&lt;br /&gt;
** Total web sockets&lt;br /&gt;
** Bytes/websockets&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway Custom Metrics&lt;br /&gt;
** mt-flow&lt;br /&gt;
** ask-for-certificate&lt;br /&gt;
** try-wrong-code&lt;br /&gt;
** try-right-code&lt;br /&gt;
** momt-flow&lt;br /&gt;
** omxen-message-collision&lt;br /&gt;
** register&lt;br /&gt;
** unregister&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for Loop-Server (per server)&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/loop_err.log&lt;br /&gt;
** /var/log/loop_out.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /var/log/nginx/access.log&lt;br /&gt;
** /var/log/nginx/error.log &lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for MSISDN-Gateway (per server)&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable Loop-Server errors:&lt;br /&gt;
 hekad loop.stderr.log&lt;br /&gt;
 The following are acceptable:&lt;br /&gt;
 Decoder &#039;LoopServer-LoopServerDecoder&#039; error: Failed parsing&lt;br /&gt;
 Plugin &#039;AggregatorOutput&#039; error: writing to heka.shared....&lt;br /&gt;
 &lt;br /&gt;
 nginx logs:&lt;br /&gt;
 The 200s (good stuff) and 101s (websockets) are acceptable. &lt;br /&gt;
 The 499s are an artifact of the current load testing tool (V1).&lt;br /&gt;
 You should only see them at the end of the load test.&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 Any percentage of 405s, 502s, or 503s is not acceptable.&lt;br /&gt;
 &lt;br /&gt;
 Application logs:&lt;br /&gt;
 Right now, we are getting a lot of 404s and 307s.&lt;br /&gt;
 They all appear to be caused by bots. There is a bug open about this.&lt;br /&gt;
 See the loop_server.out.log file.&lt;br /&gt;
 &lt;br /&gt;
 /var/log/loop_err.log&lt;br /&gt;
 The following are acceptable: connect: res.on(&amp;quot;header&amp;quot;): use on-headers module directly&lt;br /&gt;
 &lt;br /&gt;
 In the Loads Cluster dashboard, watch for the following errors/failures:&lt;br /&gt;
 string indices must be integers&lt;br /&gt;
 OR&lt;br /&gt;
 No JSON object could be decoded&lt;br /&gt;
 OR&lt;br /&gt;
 &#039;hawk-session-token&#039;&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable MSISDN-Gateway errors:&lt;br /&gt;
 The updated load test does generate a certain percentage of errors:&lt;br /&gt;
 https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
 So, expect to see a predefined percentage of 204s and 400s, along with the usual 200s in the nginx access logs.&lt;br /&gt;
 The msisdn-gateway app logs should be clean with just msisdn and test data.&lt;br /&gt;
&lt;br /&gt;
== Monitoring Loop Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard: &lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Loop Server: Check the following repos:&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla-services/docs/issues&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/issues&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** and in Bugzilla for non-Verified bugs: http://mzl.la/1qPxizw&lt;br /&gt;
&lt;br /&gt;
* OPs and Infra&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Repositories and Documentation&lt;br /&gt;
** Check here: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#References&lt;br /&gt;
&lt;br /&gt;
* The QA Test Environments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments&lt;br /&gt;
&lt;br /&gt;
* Test Plans and other QA&lt;br /&gt;
** https://docs.google.com/a/mozilla.com/document/d/1xYZijHnJ1JeJhONm2AYvxSnD2tWztC16WGFyD5U_d6g/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop/Try_Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA#Server&lt;br /&gt;
** https://intranet.mozilla.org/QA/Loop/MVP&lt;br /&gt;
&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1016147</id>
		<title>TestEngineering/Services/LoopServerLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopServerLoadTesting&amp;diff=1016147"/>
		<updated>2014-09-18T02:50:51Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Summary for Loop Server, Loop Client, MSISDN Gateway */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 Check https://call.stage.mozaws.net/config.js&lt;br /&gt;
 Should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
 and&lt;br /&gt;
 WIP from the client team: end to end tests&lt;br /&gt;
 Also:&lt;br /&gt;
 https://call.stage.mozaws.net&lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 For now, just run a quick loadtest &#039;make test&#039;&lt;br /&gt;
 cd msisdn-gateway&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Quick Verification of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment for after each Production deployment.&lt;br /&gt;
* Loop Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Then run a few &#039;make test&#039; commands from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://loop.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party server&lt;br /&gt;
 &lt;br /&gt;
 Then perform actual loop testing via desktop (Aurora/Nightly so far) and FxOS (2.1)&lt;br /&gt;
 Verify that requests and strings point to Production environments&lt;br /&gt;
&lt;br /&gt;
* Loop Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 should return &amp;quot;Welcome to the Loop web client.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/config.js&lt;br /&gt;
 should return json similar to the following:&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 should return the version and build string info&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com&lt;br /&gt;
 curl -I https://call.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 Quick end-to-end tests:&lt;br /&gt;
 Desktop: browser to browser&lt;br /&gt;
 Desktop to FxOS&lt;br /&gt;
 FxOS to Desktop&lt;br /&gt;
 Two FxOS devices&lt;br /&gt;
&lt;br /&gt;
* MSISDN Gateway&lt;br /&gt;
 In the browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 or do the following from a command line:&lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
 Or&lt;br /&gt;
 Run a single &#039;make test&#039; command from the loadtests folder:&lt;br /&gt;
 make test SERVER_URL=https://msisdn.services.mozilla.com&lt;br /&gt;
 Note: this does hit a live third-party, so limit the check to a single run.&lt;br /&gt;
 and&lt;br /&gt;
 WIP using the following tools:&lt;br /&gt;
 CLI: https://github.com/mozilla-services/msisdn-gateway/tree/master/tools/roundTrip&lt;br /&gt;
 Web app: http://mozilla-services.github.io/msisdn-verifier-client/&lt;br /&gt;
     based on the this repo: https://github.com/mozilla-services/msisdn-verifier-client&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Installing Loop-Server and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 git clone https://github.com/mozilla-services/loop-server.git&lt;br /&gt;
 cd loop-server&lt;br /&gt;
 npm install&lt;br /&gt;
 ulimit -S -n 2048&lt;br /&gt;
 npm test *&lt;br /&gt;
 cd loadtests&lt;br /&gt;
 make build&lt;br /&gt;
 make test&lt;br /&gt;
 &lt;br /&gt;
 Coverage report can be found here:&lt;br /&gt;
 /loop-server/coverage/lcov-report/index.html&lt;br /&gt;
 &lt;br /&gt;
 * This step requires the redis server to be installed and running:&lt;br /&gt;
 Mac:&lt;br /&gt;
 brew install redis&lt;br /&gt;
 redis-server /usr/local/etc/redis.conf&lt;br /&gt;
 &lt;br /&gt;
 Ubuntu Linux:&lt;br /&gt;
 sudo apt-get install redis-server&lt;br /&gt;
 sudo /usr/bin/redis-server /etc/redis/redis.conf&lt;br /&gt;
 sudo tail -f /var/log/redis/redis-server.log&lt;br /&gt;
 &lt;br /&gt;
 RHEL Linux:&lt;br /&gt;
 Install redis from here: http://download.redis.io/releases&lt;br /&gt;
 then&lt;br /&gt;
 /usr/local/bin/redis-server /home/ec2-user/redis-2.8.9/redis.conf&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the Loop-Server.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Loop-Server in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ cd loop-server/loadtests&lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Loop-Server in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
* To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
** /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Environment&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Server_Configuration&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing MSISDN-Gateway and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
** Install gmp, gmp-dev or gmp-devel&lt;br /&gt;
** Install ruby (very latest), ruby-dev or ruby-devel&lt;br /&gt;
** Install gem (required for fake_dynamo)&lt;br /&gt;
** Verify that gem is in your path&lt;br /&gt;
** Install redis-server to run the unit tests&lt;br /&gt;
&lt;br /&gt;
* To install gmp&lt;br /&gt;
 sudo yum -y install gmp, gmp-devel&lt;br /&gt;
 or for Ubuntu&lt;br /&gt;
 $ wget https://ftp.gnu.org/gnu/gmp/gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ tar xvjf gmp-6.0.0a.tar.bz2&lt;br /&gt;
 $ cd gmp-6.0.0&lt;br /&gt;
 $ ./configure --prefix=/usr&lt;br /&gt;
 $ make&lt;br /&gt;
 $ make check&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
* To install ruby:&lt;br /&gt;
 sudo yum -y install ruby, ruby-devel&lt;br /&gt;
 or&lt;br /&gt;
 sudo apt-get install ruby, ruby-dev&lt;br /&gt;
 &lt;br /&gt;
 If this does not get you 1.9.3 or newer, then install manually:&lt;br /&gt;
 Example:&lt;br /&gt;
     $ wget http://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p547.tar.gz&lt;br /&gt;
     $ ./configure --prefix=/usr&lt;br /&gt;
     $ make&lt;br /&gt;
     $ sudo make install&lt;br /&gt;
     (because for rhel, the default ruby version is 1.8.x.)&lt;br /&gt;
 REF:&lt;br /&gt;
 Main: https://www.ruby-lang.org/en/downloads/&lt;br /&gt;
 Dev Tools: http://rubyinstaller.org/downloads/ &lt;br /&gt;
&lt;br /&gt;
* To install gem:&lt;br /&gt;
 Grab rubygems from here: http://rubygems.org/pages/download&lt;br /&gt;
 cd to rubygems directory&lt;br /&gt;
 $ sudo ruby setup.rb&lt;br /&gt;
&lt;br /&gt;
* To install fake_dynamo:&lt;br /&gt;
 You should not have to install fake_dynamo since it is now part of the repo installer.&lt;br /&gt;
 But if you do:&lt;br /&gt;
 $ sudo gem install fake_dynamo&lt;br /&gt;
 REF: https://github.com/ananthakumaran/fake_dynamo&lt;br /&gt;
&lt;br /&gt;
* Install the msisdn-gateway repo:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/msisdn-gateway.git&lt;br /&gt;
 $ cd msisdn-gateway&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
 (There is a bug open about the requirement to install with &#039;sudo&#039;)&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with MSISDN-Gateway.&lt;br /&gt;
&lt;br /&gt;
* Unit testing&lt;br /&gt;
 Get redis-server installed&lt;br /&gt;
 Start the server in a separate terminal or in the background with logging active&lt;br /&gt;
 $ make test&lt;br /&gt;
 The coverage report is here: msisdn-gateway/coverage/lcov-report/index.html&lt;br /&gt;
&lt;br /&gt;
* Bugs:&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036158&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1036174&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048451&lt;br /&gt;
** https://bugzilla.mozilla.org/show_bug.cgi?id=1048456&lt;br /&gt;
&lt;br /&gt;
== Running the load test against MSISDN-Gateway in Stage ==&lt;br /&gt;
* Building the load tests&lt;br /&gt;
 $ cd loadtests&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* To load test the Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the MSISDN-Gateway ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* This environment also contains its own mock server: http://omxen.dev.mozaws.net&lt;br /&gt;
* The configuration file on the Stage server: /data/msisdn-gateway/config/production.json &lt;br /&gt;
&lt;br /&gt;
* REFs&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Gateway_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#MSISDN_Mock_Server_Stage_Details&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users &lt;br /&gt;
&lt;br /&gt;
** For make bench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test &lt;br /&gt;
&lt;br /&gt;
** For make megabench (Loop-Server and MSISDN-Gateway):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Broker to use for testing (leaves as defined for now - this is broker in the Loads Cluster)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel)&lt;br /&gt;
&lt;br /&gt;
* Loop-Server load test code&lt;br /&gt;
** The Loop-Server load test can not currently be configured in the code&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway load test code&lt;br /&gt;
** The MSISDN-Gateway load test can be configured in the code - see the following lines: &lt;br /&gt;
** Test server URL: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L15&lt;br /&gt;
** Error percentages: https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
&lt;br /&gt;
* General REFs: &lt;br /&gt;
** https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* Loop-Server&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Custom Metrics&lt;br /&gt;
** Opened web sockets&lt;br /&gt;
** Total web sockets&lt;br /&gt;
** Bytes/websockets&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* MSISDN-Gateway Custom Metrics&lt;br /&gt;
** mt-flow&lt;br /&gt;
** ask-for-certificate&lt;br /&gt;
** try-wrong-code&lt;br /&gt;
** try-right-code&lt;br /&gt;
** momt-flow&lt;br /&gt;
** omxen-message-collision&lt;br /&gt;
** register&lt;br /&gt;
** unregister&lt;br /&gt;
** addFailure (from the loads tool/client)&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for Loop-Server (per server)&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/loop_err.log&lt;br /&gt;
** /var/log/loop_out.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /var/log/nginx/access.log&lt;br /&gt;
** /var/log/nginx/error.log &lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for MSISDN-Gateway (per server)&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable Loop-Server errors:&lt;br /&gt;
 hekad loop.stderr.log&lt;br /&gt;
 The following are acceptable:&lt;br /&gt;
 Decoder &#039;LoopServer-LoopServerDecoder&#039; error: Failed parsing&lt;br /&gt;
 Plugin &#039;AggregatorOutput&#039; error: writing to heka.shared....&lt;br /&gt;
 &lt;br /&gt;
 nginx logs:&lt;br /&gt;
 Some percentage of 200s, 204s, and 404s is acceptable. Some of the 404s are actually bot/spam &lt;br /&gt;
 activity in the /media/ephemeral0/nginx/logs/loop_server.access.log and&lt;br /&gt;
 /media/ephemeral0/circus/loop_server/loop_server.out.log logs.&lt;br /&gt;
 Any percentage of 405s, 502s, or 503s is not acceptable.&lt;br /&gt;
 &lt;br /&gt;
 /var/log/loop_err.log&lt;br /&gt;
 The following are acceptable: connect: res.on(&amp;quot;header&amp;quot;): use on-headers module directly&lt;br /&gt;
 &lt;br /&gt;
 In the Loads Cluster dashboard, watch for the following errors/failures:&lt;br /&gt;
 string indices must be integers&lt;br /&gt;
 OR&lt;br /&gt;
 No JSON object could be decoded&lt;br /&gt;
 OR&lt;br /&gt;
 &#039;hawk-session-token&#039;&lt;br /&gt;
&lt;br /&gt;
* Acceptable/Unacceptable MSISDN-Gateway errors:&lt;br /&gt;
 The updated load test does generate a certain percentage of errors:&lt;br /&gt;
 https://github.com/mozilla-services/msisdn-gateway/blob/master/loadtests/loadtest.py#L19-L22&lt;br /&gt;
 So, expect to see a predefined percentage of 204s and 400s, along with the usual 200s in the nginx access logs.&lt;br /&gt;
 The msisdn-gateway app logs should be clean with just msisdn and test data.&lt;br /&gt;
&lt;br /&gt;
== Monitoring Loop Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard: &lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Loop Server: Check the following repos:&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla-services/docs/issues&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/issues&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** and in Bugzilla for non-Verified bugs: http://mzl.la/1qPxizw&lt;br /&gt;
&lt;br /&gt;
* OPs and Infra&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Repositories and Documentation&lt;br /&gt;
** Check here: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#References&lt;br /&gt;
&lt;br /&gt;
* The QA Test Environments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments&lt;br /&gt;
&lt;br /&gt;
* Test Plans and other QA&lt;br /&gt;
** https://docs.google.com/a/mozilla.com/document/d/1xYZijHnJ1JeJhONm2AYvxSnD2tWztC16WGFyD5U_d6g/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop/Try_Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA&lt;br /&gt;
** https://wiki.mozilla.org/Loop/QA#Server&lt;br /&gt;
** https://intranet.mozilla.org/QA/Loop/MVP&lt;br /&gt;
&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TokenServerAndSyncLoadTesting&amp;diff=1016146</id>
		<title>TestEngineering/Services/TokenServerAndSyncLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TokenServerAndSyncLoadTesting&amp;diff=1016146"/>
		<updated>2014-09-18T02:50:38Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Summary for Tokenserver, Verifier, and Sync 1.5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* NOTE: We currently have two Verifier stacks in Stage (and probably Production):&lt;br /&gt;
** The standalone Browser_ID Verifier stack: See that Verifier sections below...&lt;br /&gt;
** A Tokenserver+Verifier stack: See the TokenServer sections below...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
&lt;br /&gt;
* TokenServer+Verifier Stage environment:&lt;br /&gt;
 From the browser: https://token.stage.mozaws.net&lt;br /&gt;
 curl https://token.stage.mozaws.net&lt;br /&gt;
 curl -I https://token.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of tokenserver on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Alternate method:&lt;br /&gt;
 Use the test tool from here: https://github.com/edmoz/fxa-sync-client&lt;br /&gt;
 Install and check all collection types for a known account in Stage:&lt;br /&gt;
 bin/sync-cli.js -e EMAIL -p PASSWORD --env stage -t COLLECTION&lt;br /&gt;
     where -t is one of bookmarks,history,passwords,tabs,addons,prefs,forms&lt;br /&gt;
&lt;br /&gt;
* Verifier Stage environment:&lt;br /&gt;
 In the browser: https://verifier.stage.mozaws.net/&lt;br /&gt;
 curl https://verifier.stage.mozaws.net&lt;br /&gt;
 curl -I https://verifier.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of browserid-verifier on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Sync Server Stage environment:&lt;br /&gt;
 Install server-syncstorage to the local host or AWS instance (see below)&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 Quick test against the TokenServer&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py --use-token-server &amp;lt;Stage TokenServer&amp;gt;&lt;br /&gt;
 Current example:&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py --use-token-server &lt;br /&gt;
     https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
 Quick tests against the Sync nodes&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &amp;lt;Stage Sync Node&amp;gt;#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 Current examples:&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 Get the Node Secret information from OPs&lt;br /&gt;
&lt;br /&gt;
* Using TPS&lt;br /&gt;
** The TPS FxA/Sync automated tests can be used as well, but the following file will have to be edited to add Stage environment configuration parameters: https://github.com/mozilla/gecko-dev/blob/master/testing/tps/tps/testrunner.py&lt;br /&gt;
** See the following wiki page for more information: https://wiki.mozilla.org/User_Services/Sync/Run_TPS&lt;br /&gt;
** See also: https://bugzilla.mozilla.org/show_bug.cgi?id=1006675&lt;br /&gt;
&lt;br /&gt;
== Quick Verification Of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment after a new deployment.&lt;br /&gt;
&lt;br /&gt;
* Tokenserver+Verifier Production Environment&lt;br /&gt;
 In the browser: https://token.services.mozilla.com&lt;br /&gt;
 curl https://token.services.mozilla.com&lt;br /&gt;
 curl -I https://token.services.mozilla.com&lt;br /&gt;
 Then:&lt;br /&gt;
 Use the test tool from here: https://github.com/edmoz/fxa-sync-client&lt;br /&gt;
 Install and check all collection types for a known account in Production:&lt;br /&gt;
 bin/sync-cli.js -e PROD-EMAIL -p PASSWORD -t COLLECTION&lt;br /&gt;
     where -t is one of bookmarks,history,passwords,tabs,addons,prefs,forms&lt;br /&gt;
&lt;br /&gt;
* Verifier Production Environment&lt;br /&gt;
 In the browser: https://verifier.accounts.firefox.com&lt;br /&gt;
 curl https://verifier.accounts.firefox.com&lt;br /&gt;
 curl -I https://verifier.accounts.firefox.com&lt;br /&gt;
 Then:&lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of browserid-verifier on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* Sync Server Stage environment&lt;br /&gt;
 Sign in with a known FxA account and sync data with a current Production account (sync node).&lt;br /&gt;
 Create a new FxA account and set up sync.&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#Loads_Services_Cluster_Environment&lt;br /&gt;
&lt;br /&gt;
== Installing BrowserID-Verifier and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 $ git clone git://github.com/mozilla/browserid-verifier&lt;br /&gt;
 $ cd browserid-verifier&lt;br /&gt;
 $ npm install&lt;br /&gt;
 $ npm test&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
      Note: This should hit Stage by default: SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the verifier.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Verifier in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://verifier.stage.mozaws.net	&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: The Stage Verifier hits the Stage mockmyid server&lt;br /&gt;
&lt;br /&gt;
* Production environment: &lt;br /&gt;
 $ make test SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
 $ make bench SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Verifier ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=TBD&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing TokenServer+Verifier and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/tokenserver&lt;br /&gt;
 $ cd tokenserver&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ make test&lt;br /&gt;
     Note: This is for local testing only&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
     Note: This should hit Prod by default: SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with TokenServer+Verifier.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against TokenServer+Verifier in Stage ==&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://token.stage.mozaws.net		&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: This also hits the Stage Verifier, which in turns hits the Stage mockmyid server&lt;br /&gt;
&lt;br /&gt;
* And while we are at it...&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 $ make bench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 $ make bench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for TokenServer+Verifier ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/tokenserver/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing Sync 1.5 and the Loads tool on Localhost or AWS ==&lt;br /&gt;
 Installation:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/server-syncstorage/&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ make test&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with Sync 1.5.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against Sync 1.5 in Stage ==&lt;br /&gt;
* Loads against specific Sync nodes in Stage&lt;br /&gt;
 $ make test SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
 $ make bench SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
 Sync Stage nodes:&lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net&lt;br /&gt;
     https://sync-2-us-east-1.stage.mozaws.net&lt;br /&gt;
     https://sync-3-us-east-1.stage.mozaws.net&lt;br /&gt;
     ...etc...&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 &lt;br /&gt;
 NOTE: The OPs team has the SECRET string for Stage. Get it from them before you start testing.&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for Sync 1.5 in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Running a combined load test against TokenServer+Verifier and Sync 1.5 in Stage ==&lt;br /&gt;
* A combined loads test against TokenServer and Sync 1.5 in Stage&lt;br /&gt;
* This is done via the server-syncstorage directory that was cloned and built above&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make test SERVER_URL=https://your.tokenserver.here&lt;br /&gt;
 $ make bench SERVER_URL=https://your.tokenserver.here&lt;br /&gt;
 &lt;br /&gt;
 Examples for Stage:&lt;br /&gt;
 $ make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 See https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#TokenServer.2BVerifier_Stage_Environment&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: The Stage Tokenserver hits the Stage Verifier, which, in turn, hits the mockmyid server.&lt;br /&gt;
&lt;br /&gt;
* And while we are at it...&lt;br /&gt;
 Dev environment:&lt;br /&gt;
 Examples:&lt;br /&gt;
 $ make test SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 $ make bench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 &lt;br /&gt;
 Prod environment:&lt;br /&gt;
 Examples:&lt;br /&gt;
 $ make test SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 $ make bench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 See https://wiki.mozilla.org/QA/Services/FxATestEnvironments#FxA.2C_TokenServer.2C_and_Sync_Production_Environments&lt;br /&gt;
 and https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#TokenServer_and_Sync_1.5_Dev_Environments&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for a combined load test in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Prod environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (BrowserID-Verifier, TokenServer, Sync, Combined):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
&lt;br /&gt;
** For make bench (BrowserID-Verifier, TokenServer, Sync, Combined):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
&lt;br /&gt;
** For make megabench (using the LoadsCluster with BrowserID-Verifier, TokenSerer, Sync, Combined):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel) &lt;br /&gt;
*** SSH (the user account needed to SSH into the loads cluster - the default is ubuntu)&lt;br /&gt;
&lt;br /&gt;
* Tokenserver load test code&lt;br /&gt;
** The Tokenserver load test can be configured - see the following lines:&lt;br /&gt;
** Basic Settings: https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** MockMyID: https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L19-L36&lt;br /&gt;
** Percentages: https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L39-L51&lt;br /&gt;
&lt;br /&gt;
* Verifier load test code&lt;br /&gt;
** The Verifier load test can be configured - see the following lines:&lt;br /&gt;
** Various settings: https://github.com/mozilla/browserid-verifier/blob/master/loadtest/loadtest.py#L13-L53&lt;br /&gt;
&lt;br /&gt;
* Sync Server load test code&lt;br /&gt;
** The Sync Server load test can be configured - see the following lines:&lt;br /&gt;
** Setting MockMyID: https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py#L26-L45&lt;br /&gt;
** Setting test distributions: https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py#L48-L83&lt;br /&gt;
&lt;br /&gt;
* REFs: &lt;br /&gt;
** https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/blob/master/loadtest/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* TokenServer&lt;br /&gt;
** File location: tokenserver/loadtest/loadtest.py&lt;br /&gt;
** Inside NoteAssignmentTest, test_realistic is the main load test; the others are for specific behaviors&lt;br /&gt;
** The test runs as following:&lt;br /&gt;
 95% ask for assertions on existing users (on a DB filled by test_single_token_exchange)&lt;br /&gt;
 4% ask for assertion on a new use&lt;br /&gt;
 1% ask for a bad assertion&lt;br /&gt;
** A bug has been filed to get the following additional coverage for the load test:&lt;br /&gt;
*** generation numbers in assertion&lt;br /&gt;
*** client state string&lt;br /&gt;
** A bug has been filed to get some integration tests written:&lt;br /&gt;
*** to cover the edge/error cases not in the load test&lt;br /&gt;
*** to be pointed at a remote server&lt;br /&gt;
&lt;br /&gt;
* Sync&lt;br /&gt;
** File location: server-syncstorage/loadtest/stress.py&lt;br /&gt;
** This is the Sync 2.0 load test that has been back-ported for Sync 1.5.&lt;br /&gt;
** The stress.py file is fully configurable for the following:&lt;br /&gt;
*** client probability&lt;br /&gt;
*** client distribution&lt;br /&gt;
*** collections&lt;br /&gt;
** A bug has been filed to add support for load testing tabs&lt;br /&gt;
*** The tab collection it uses memcache; we need to figure out a way to test it without overloading the server&lt;br /&gt;
** There are currently no constants to define how to select percentages per collection type&lt;br /&gt;
** Right now, we need to manually configure the collections list in stress.py:&lt;br /&gt;
*** collections = [&#039;bookmarks&#039;, &#039;forms&#039;, &#039;passwords&#039;, &#039;history&#039;, &#039;prefs&#039;]&lt;br /&gt;
*** Basically, you can add more entries of each type, since the load test (per user/again/hit/pass) picks randomly from the list for any given request...&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Tokenserver Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* Verifier Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* Sync Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for TokenServer (per server)&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.log.*&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.error.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stdout.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stderr.log&lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for Verifier (per server)&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/squid/access.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stderr.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stdout.log &lt;br /&gt;
&lt;br /&gt;
* 3. Important error logs for Sync (per Sync node)&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/nginx/access.log&lt;br /&gt;
** /media/ephemeral0/error.log&lt;br /&gt;
** /media/ephemeral0/sync/sync.err&lt;br /&gt;
** /media/ephemeral0/sync/sync.log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Acceptable TokenServer errors:&lt;br /&gt;
 1% - 2% failures (as the following)&lt;br /&gt;
 token.log:&lt;br /&gt;
 &amp;quot;name&amp;quot;: &amp;quot;token.assertion.invalid_signature_error&amp;quot;&lt;br /&gt;
 &amp;quot;name&amp;quot;: &amp;quot;token.assertion.verify_failure&amp;quot;&lt;br /&gt;
 nginx access.log:&lt;br /&gt;
 401s&lt;br /&gt;
 NOTE: Values can be tweaked here:&lt;br /&gt;
     https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L58-L60&lt;br /&gt;
 &lt;br /&gt;
 The following types of errors are known:&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
     Exception KeyError: KeyError(49564400,) in &amp;lt;module &#039;threading&#039;...&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.log&lt;br /&gt;
     ...&amp;quot;Starting new HTTP connection (9): 127.0.0.1&amp;quot;, &amp;quot;hostname&amp;quot;: ...&lt;br /&gt;
     {&amp;quot;error&amp;quot;: &amp;quot;StopIteration()&amp;quot;, &amp;quot;traceback&amp;quot;: &amp;quot;Uncaught exception:\n  &lt;br /&gt;
     File \&amp;quot;/data/tokenserver/local/lib/python2.6/site-packages/gunicorn/workers/async.py\&amp;quot;...&lt;br /&gt;
     ...&amp;quot;Connection pool is full, discarding connection: 127.0.0.1&amp;quot;, &amp;quot;...&lt;br /&gt;
 REF:&lt;br /&gt;
 https://bugzilla.mozilla.org/show_bug.cgi?id=1040396&lt;br /&gt;
 https://bugzilla.mozilla.org/show_bug.cgi?id=1040397&lt;br /&gt;
 &lt;br /&gt;
 OLD: Also, it may be the case that the following errors are &amp;quot;acceptable&amp;quot; if TS Stage is larger than Verifier Stage:&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
 Verifier-related errors of these types:&lt;br /&gt;
 &amp;quot;HttpConnectionPool is full, discarding connection: verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
 &amp;quot;Resetting dropped connection: verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
 &amp;quot;Starting new HTTPS connection (179): verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Acceptable Verifier errors:&lt;br /&gt;
 The verifier_out.log will show errors of the following types:&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;untrusted issuer...&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;expired&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;algorithms do not match&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;audience mismatch: scheme mismatch&#039;&lt;br /&gt;
&lt;br /&gt;
* Acceptable Sync node errors:&lt;br /&gt;
 In the nginx access.log files:&lt;br /&gt;
 We will see some percentage of 404s. Right now we see the following:&lt;br /&gt;
     14% 404s (compared to the total count of 200s)&lt;br /&gt;
     with the config set up as follows:&lt;br /&gt;
          users = 20&lt;br /&gt;
          duration = 1800&lt;br /&gt;
          agents = 5&lt;br /&gt;
 Ideally, the overall percentage of 404s should drop the longer the load test.&lt;br /&gt;
 Usually, you will not see 304s, 400s, 412s, or 415s for a load test,&lt;br /&gt;
 although they may show up in the logs after running the remote integration tests.&lt;br /&gt;
 &lt;br /&gt;
 In /var/log/hekad/sync_1_5.stderr.log&lt;br /&gt;
 You may see some Decoder &#039;Sync-1_5-SlowQuery-MySqlSlowQueryDecoder&#039; error: Failed parsing&lt;br /&gt;
 and a lot of BSO INSERTs&lt;br /&gt;
 &lt;br /&gt;
 In /media/ephemeral0/logs/sync/sync.err&lt;br /&gt;
 You should see expected skew and QueuePool messages and Deprecation warnings&lt;br /&gt;
 Also, these are known&lt;br /&gt;
 Exception SystemExit&lt;br /&gt;
 Exception KeyError&lt;br /&gt;
 This is probably https://bugzilla.mozilla.org/show_bug.cgi?id=1040397&lt;br /&gt;
&lt;br /&gt;
== Monitoring TS and Sync Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard:&lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Tokenserver: &lt;br /&gt;
** Repo: https://github.com/mozilla-services/tokenserver/issues &lt;br /&gt;
** Bugzilla: http://mzl.la/1s4qZKn&lt;br /&gt;
&lt;br /&gt;
* BrowserID-Verifier:&lt;br /&gt;
** Repo: https://github.com/mozilla/browserid-verifier/issues&lt;br /&gt;
** Bugzilla: no specific cateogory&lt;br /&gt;
&lt;br /&gt;
* Sync:&lt;br /&gt;
** Repo: https://github.com/mozilla-services/server-syncstorage/issues&lt;br /&gt;
** Bugzilla: http://mzl.la/VUrYQ5&lt;br /&gt;
&lt;br /&gt;
* OPs and Infrastructure&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Other URLs&lt;br /&gt;
** http://restmail.net&lt;br /&gt;
** https://mockmyid.com&lt;br /&gt;
* Repositories&lt;br /&gt;
** https://github.com/mozilla-services/tokenserver&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier&lt;br /&gt;
** https://github.com/mozilla/browserid-local-verify&lt;br /&gt;
** https://github.com/callahad/mockmyid&lt;br /&gt;
** https://github.com/mozilla/restmail.net&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com&lt;br /&gt;
** https://docs.services.mozilla.com/token/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Sagrada/TokenServer&lt;br /&gt;
** https://docs.services.mozilla.com/sync/&lt;br /&gt;
* The QA Test Environments: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
* Deploying the FxA Load Test environment for broker/agents usage:&lt;br /&gt;
** https://github.com/mozilla/fxa-deployment&lt;br /&gt;
* Sync 1.5 protocol, documentation, etc.&lt;br /&gt;
** https://github.com/mozilla-services/docs&lt;br /&gt;
** https://docs.services.mozilla.com/#how-to&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-fxa.html&lt;br /&gt;
** https://docs.services.mozilla.com/token/apis.html&lt;br /&gt;
** https://docs.services.mozilla.com/storage/apis-1.5.html&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-sync-1.5.html&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-sync-1.5.html&lt;br /&gt;
** https://github.com/mozilla-services/syncserver&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/FxALoadTesting&amp;diff=1016145</id>
		<title>TestEngineering/Services/FxALoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/FxALoadTesting&amp;diff=1016145"/>
		<updated>2014-09-18T02:50:23Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Summary for FxA-Auth-Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
 Install FxA-Auth-Server to a local host or an AWS instance (see below)&lt;br /&gt;
 $ cd fxa-auth-server&lt;br /&gt;
 Run the integration tests against the remote Stage server (load balancer)&lt;br /&gt;
 $ PUBLIC_URL=&amp;lt;FxA Stage&amp;gt; npm run test-remote&lt;br /&gt;
 Current example:&lt;br /&gt;
 $ PUBLIC_URL=https://api-accounts.stage.mozaws.net npm run test-remote&lt;br /&gt;
* NOTE: Make sure to install and test from the same branch that is deployed to Stage (ie do not use Master for running the tests against Stage or Production).&lt;br /&gt;
&lt;br /&gt;
* Using TPS&lt;br /&gt;
** The TPS FxA/Sync automated tests can be used as well, but the following file will have to be edited to add Stage environment configuration parameters: https://github.com/mozilla/gecko-dev/blob/master/testing/tps/tps/testrunner.py&lt;br /&gt;
** See the following wiki page for more information: https://wiki.mozilla.org/User_Services/Sync/Run_TPS&lt;br /&gt;
** See also: https://bugzilla.mozilla.org/show_bug.cgi?id=1006675&lt;br /&gt;
&lt;br /&gt;
== Quick Verification Of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment after each new deployment. There are other verifications that can be run as well&lt;br /&gt;
 Install FxA-Auth-Server to a local host or an AWS instance (see below)&lt;br /&gt;
 $ cd fxa-auth-server&lt;br /&gt;
 Run the integration tests against the remote Stage server (load balancer)&lt;br /&gt;
 $ PUBLIC_URL=&amp;lt;FxA Prod&amp;gt; npm run test-remote&lt;br /&gt;
 Current example:&lt;br /&gt;
 $ PUBLIC_URL=https://api.accounts.firefox.com npm run test-remote&lt;br /&gt;
* NOTE: Make sure to install and test from the same branch that is deployed to Production.&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Installing FxA-Auth-Server and the Loads tool on Localhost or AWS ==&lt;br /&gt;
 Installation:&lt;br /&gt;
 $ git clone https://github.com/mozilla/fxa-auth-server.git&lt;br /&gt;
 $ cd ./fxa-auth-server&lt;br /&gt;
 $ npm install&lt;br /&gt;
 $ npm test&lt;br /&gt;
 $ cd ./test/load&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* Note: &#039;npm install&#039; may need to be run now as root.&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with FxA-Auth-Server.&lt;br /&gt;
&lt;br /&gt;
== Running the Loads tool against FxA Stage ==&lt;br /&gt;
* The basic load test can be run as follows&lt;br /&gt;
 $ make test SERVER_URL=https://api-accounts.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* The full, default load test can be run as follows&lt;br /&gt;
 $ make bench SERVER_URL=https://api-accounts.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
&lt;br /&gt;
* Configuring the bench load test - config folder:&lt;br /&gt;
** The test.ini file (for make test) can be configured for the following:&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
** The bench.ini file (for make bench) can be configured for the following:&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
 &lt;br /&gt;
* For both tests, start with the defaults, then tweak the duration. Users and Agents are optional tweaks/changes. Also, we can configure the bench load test to run in detached mode with an appropriate loads detach and observer settings.&lt;br /&gt;
&lt;br /&gt;
* REF: https://github.com/mozilla/fxa-auth-server/tree/master/loadtest/config&lt;br /&gt;
&lt;br /&gt;
== Running the Loads tool against FxA Development or Production ==&lt;br /&gt;
* This can be done if we are comparing Stage vs. some other environment and have access to the AWS logs in Dev or Production:&lt;br /&gt;
&lt;br /&gt;
* Dev:&lt;br /&gt;
 $ make test SERVER_URL=https://accounts.dev.lcip.org&lt;br /&gt;
 $ make bench SERVER_URL=https://accounts.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Prod:&lt;br /&gt;
 $ make test SERVER_URL=https://api.accounts.firefox.com&lt;br /&gt;
 $ make bench SERVER_URL=https://api.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* The same optional configuration changes apply here.&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench). &lt;br /&gt;
&lt;br /&gt;
* Testing against the Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://api-accounts.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Testing against the Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://api-accounts.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Testing against the Prod enviornment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://api.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* Configuring the megabench load test - config folder:&lt;br /&gt;
** The megabench.ini file (for make megabench) can be configured for the following:&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (leave as defined for now)&lt;br /&gt;
*** Python dependencies (leave as defined for now)&lt;br /&gt;
*** Broker to use for testing (leaves as defined for now - this is broker in the Loads Cluster)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel)&lt;br /&gt;
&lt;br /&gt;
* REF: https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
* REF: https://github.com/mozilla/fxa-auth-server/tree/master/loadtest/config&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test:&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
&lt;br /&gt;
** For make bench:&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
&lt;br /&gt;
** For make megabench:&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Broker to use for testing (leaves as defined for now - this is broker in the Loads Cluster)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel)&lt;br /&gt;
&lt;br /&gt;
* Load Test code: loadtests.py&lt;br /&gt;
** The load test can be configured in the code - see the following lines:&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/blob/master/test/load/loadtests.py#L17-L39&lt;br /&gt;
&lt;br /&gt;
* General REFs: &lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/blob/master/test/load/loadtests.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* Location fxa-auth-server/loadtest/loadtests.py&lt;br /&gt;
* The following items are covered in the load test&lt;br /&gt;
** test_auth_server is the main entry point in the loadtests.py file&lt;br /&gt;
*** account creation&lt;br /&gt;
*** session creation&lt;br /&gt;
** account deletion&lt;br /&gt;
** session deletion&lt;br /&gt;
* Integration tests&lt;br /&gt;
** These are designed to cover the edge/error cases that are not applicable to the load test&lt;br /&gt;
** The tests can be run against a remote server&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues. &lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for FxA-Auth-Server (per server)&lt;br /&gt;
** /media/ephemeral0/fxa-auth-server/auth_err.log.*&lt;br /&gt;
** /media/ephemeral0/fxa-auth-server/auth_out.log&lt;br /&gt;
** /media/ephemeral0/heka/hekad_err.log&lt;br /&gt;
** /media/ephemeral0/heka/hekad_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/access.log &lt;br /&gt;
** /media/ephemeral0/nginx/logs/error.log&lt;br /&gt;
&lt;br /&gt;
* Acceptable FxA-Auth-Server errors&lt;br /&gt;
 503s: especially of this type - /v1/certificate/sign - are usually a sign that we are overloading the hosts&lt;br /&gt;
 &lt;br /&gt;
 400s: we should never see these in the logs, especially if the &amp;quot;errno&amp;quot; value is 105. &lt;br /&gt;
     Check the fxa-auth-server/auth_err.log&lt;br /&gt;
 400s: &amp;quot;errno&amp;quot; values of 101, 102 are ok. These can be expected during a load test.&lt;br /&gt;
 &lt;br /&gt;
 ELB issues: we may see 503s and corresponding &amp;quot;err&amp;quot;:&amp;quot;cannot enqueue work: maximum backlog exceeded (30)&amp;quot; &lt;br /&gt;
     messages if one or more of the hosts behind the ELB is receiving most of the load traffic.&lt;br /&gt;
 REF: https://github.com/mozilla/fxa-auth-server/issues/647&lt;br /&gt;
&lt;br /&gt;
== Monitoring FxA Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com/&lt;br /&gt;
** or http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard:&lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* FxA&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/issues&lt;br /&gt;
** https://github.com/mozilla/fxa-content-server/issues&lt;br /&gt;
** and several others&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** No specific category&lt;br /&gt;
&lt;br /&gt;
* Infrastructure&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and clusters&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
&lt;br /&gt;
== Capacity Planning Stage and Production ==&lt;br /&gt;
* QA is tasked with providing some capacity requirements and constraints based on repeated load testing of the FxA-Auth-Server Stage environment.&lt;br /&gt;
* The goal is to be able to work with OPs to develop a realistic plan for deploying and maintaining the production environment at a level expected for projected user traffic, etc.&lt;br /&gt;
&lt;br /&gt;
* Brainstorming the QA role:&lt;br /&gt;
** QA needs to get some realistic numbers from the Product team. This could be as simple as traffic flow (number of users per day or per segments of the day - peaks and valleys) or more detailed:&lt;br /&gt;
*** Traffic flow - QPS/RPS&lt;br /&gt;
*** Average number of users per time segment&lt;br /&gt;
*** Average and peak latency&lt;br /&gt;
*** Error percentages and thresholds&lt;br /&gt;
*** etc&lt;br /&gt;
** QA gets help from OPs to learn how to measure those required numbers/values using StackDriver or other tools (or to get data from OPsView). If those numbers can not be measured then we either need to&lt;br /&gt;
*** get a different set of data points from the Product team&lt;br /&gt;
*** enhance the current tools to track and measure the required data&lt;br /&gt;
** QA does repeated, scheduled, well-defined load tests in Stage while actively monitoring the results, logs, data, etc.&lt;br /&gt;
** QA finds a stable configuration that - when scaled - would &lt;br /&gt;
*** match the needs of Product when we release&lt;br /&gt;
*** match the realisitc capacity planning that OPs normally does&lt;br /&gt;
&lt;br /&gt;
* Dependencies&lt;br /&gt;
** Realistic traffic/user numbers from the FxA Product team&lt;br /&gt;
** Timely training on monitoring tools from the OPs team&lt;br /&gt;
** Regular and realistic scaling/testing of deployments to Stage by QA given our current pre-release and post-release schedules&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Repository: https://github.com/mozilla/fxa-auth-server&lt;br /&gt;
* The QA Test Environments:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
* Deploying the FxA Load Test environment for broker/agents usage:&lt;br /&gt;
** https://github.com/mozilla/fxa-deployment&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TSVerifierSyncTestEnvironments&amp;diff=1016144</id>
		<title>TestEngineering/Services/TSVerifierSyncTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TSVerifierSyncTestEnvironments&amp;diff=1016144"/>
		<updated>2014-09-18T02:48:02Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Monitoring the Stage Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* NOTE: We currently have two Verifier stacks in Stage (and probably Production): &lt;br /&gt;
** The standalone Browser_ID Verifier stack: See that Verifier Stage section below...&lt;br /&gt;
** A Tokenserver+Verifier stack: See the TokenServer Stage section below...&lt;br /&gt;
&lt;br /&gt;
== Tokenserver, Verifier, and Sync Production Environments ==&lt;br /&gt;
* TokenServer: https://token.services.mozilla.com&lt;br /&gt;
* Verifier: https://verifier.accounts.firefox.com&lt;br /&gt;
* Sync 1.5 Nodes (for now in AWS):&lt;br /&gt;
** sync-1-us-east-2.sync.services.mozilla.com&lt;br /&gt;
** sync-2-us-east-2.sync.services.mozilla.com&lt;br /&gt;
*** There are many more than this now...&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production FxA/Sync:&lt;br /&gt;
** Set/Verify the following Firefox configs:&lt;br /&gt;
*** services.sync.clusterURL = (should get automatically set by the TokenServer)&lt;br /&gt;
*** services.sync.tokenServerURI = https://token.services.mozilla.com/1.0/sync/1.5&lt;br /&gt;
*** services.sync.fxaccounts.enabled=true (NEW FOR NIGHTLY FF 29 - SHOULD BE SET BY DEFAULT)&lt;br /&gt;
*** services.sync.log.appender.file.logOnError = Yes&lt;br /&gt;
*** services.sync.log.appender.file.logOnSuccess = Yes&lt;br /&gt;
*** services.sync.log.appender.file.level = Trace&lt;br /&gt;
*** identity.fxaccounts.auth.uri = https://api.accounts.firefox.com/v1&lt;br /&gt;
*** identity.fxaccounts.remote.uri = https://accounts.firefox.com/?service=sync&amp;amp;context=...&lt;br /&gt;
&lt;br /&gt;
== TokenServer+Verifier Stage Environment ==&lt;br /&gt;
* NOTE: In an upcoming deployent, the Verifier functionality will be rolled into the Tokenserver stack of services.&lt;br /&gt;
&lt;br /&gt;
* URLs&lt;br /&gt;
** TokenServer: https://token.stage.mozaws.net&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net&lt;br /&gt;
** IdP: http://mockmyid.s3-website-us-west-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
* Version:&lt;br /&gt;
 TokenServer:&lt;br /&gt;
 rpm -qa | grep -E &#039;token|browser&#039;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Shared:&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-rabbitmq&lt;br /&gt;
*** shared-rabbitmq  &lt;br /&gt;
*** shared-bastion&lt;br /&gt;
*** shared-heka&lt;br /&gt;
&lt;br /&gt;
** tokenserver app server          (1 or more instances behind a CF stack and ELB)&lt;br /&gt;
** tokenserver db                  (1 large DB instance behind RDS)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/tokenserver&lt;br /&gt;
*** esp. /data/fxa-browserid-verifier/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/fxa-browserid-verifier&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
*** esp. /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa_verifier.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/tokenserver.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/tokenserver.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** tokenserver app server:&lt;br /&gt;
*** Search for token, circus, nginx, gunicorn, python, hekad, node&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.log.*&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.error.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log		(not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log		(not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.error.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stdout.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stderr.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/puppet/modules/hekad&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
== Verifier Stage Environment ==&lt;br /&gt;
* NOTE: In an upcoming deployment, the Verifier functionality will be rolled into the Tokenserver stack of services.&lt;br /&gt;
&lt;br /&gt;
* URLs&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net&lt;br /&gt;
** IdP: http://mockmyid.s3-website-us-west-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
* Version:&lt;br /&gt;
** rpm -qa | grep verifier&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Shared:&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-rabbitmq&lt;br /&gt;
*** shared-rabbitmq  &lt;br /&gt;
*** shared-bastion&lt;br /&gt;
*** shared-heka&lt;br /&gt;
&lt;br /&gt;
** fxa-browserid_verifier or fxa-bv-stage (usually a single instance)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/fxa-browserid-verifier&lt;br /&gt;
*** esp. /data/fxa-browserid-verifier/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
*** esp. the /etc/puppet/yaml/app files&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Search for node, heka, nginx, circus&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/squid/access.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stderr.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/puppet/modules/hekad&lt;br /&gt;
** /data/hekad&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
* Quick verifications&lt;br /&gt;
 Browser: https://verifier.stage.mozaws.net/&lt;br /&gt;
 returns &amp;quot;Method Not Allowed&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $ curl https://verifier.stage.mozaws.net&lt;br /&gt;
 returns &amp;quot;Method Not Allowed&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $ curl -I https://verifier.stage.mozaws.net&lt;br /&gt;
 HTTP/1.1 405 Method Not Allowed&lt;br /&gt;
 Cache-Control: no-cache, max-age=0&lt;br /&gt;
 Content-length: 18&lt;br /&gt;
 Content-Type: text/plain&lt;br /&gt;
 Date: Wed, 23 Jul 2014 20:19:40 GMT&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
== Sync 1.5 Stage Environment ==&lt;br /&gt;
* This is a work in progress. Right now, there are only a small number of sync nodes (instances) in AWS.&lt;br /&gt;
* URLs&lt;br /&gt;
** https://sync-1-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-2-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-3-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-4-us-east-1.stage.mozaws.net&lt;br /&gt;
** and sometimes&lt;br /&gt;
** https://sync-5-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-6-us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
 Server-Syncstorage (sync node):&lt;br /&gt;
 rpm -qa | grep syncstorage&lt;br /&gt;
 Example: server-syncstorage &amp;lt;latest version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Search for sync node instances in US East: &amp;quot;stage-sync-node-X&amp;quot;&lt;br /&gt;
** Each node is a specific large instance (mixed m3 and c3)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/server-syncstorage/*&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Search for sync, mysql, circusd, hekad, nginx, memcached&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/logs/nginx/access.log&lt;br /&gt;
** /media/ephemeral0/logs/nginx/error.log&lt;br /&gt;
** /media/ephemeral0/logs/sync/sync.err&lt;br /&gt;
** /media/ephemeral0/logs/sync/sync.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/sync_1_5.stderr.log&lt;br /&gt;
** /var/log/hekad/sync_1_5.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/heka.d/sync_1_5.toml&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
&lt;br /&gt;
* Note: There is no longer a Sync 1.1 Stage environment.&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* Details on the Loads V1 cluster are available at this link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Stackdriver:&lt;br /&gt;
** Stage main: https://app.stackdriver.com&lt;br /&gt;
** https://app.stackdriver.com/groups/4388/stage-services-tag-sync15&lt;br /&gt;
** https://app.stackdriver.com/groups/4389/stage-services-tag-sync15/stage-services-sync15/fxa-verifier&lt;br /&gt;
** https://app.stackdriver.com/groups/4391/stage-services-tag-sync15/stage-services-tag-sync15/sync-storage&lt;br /&gt;
** https://app.stackdriver.com/groups/4390/stage-services-tag-sync15/stage-services-sync15/tokenserver&lt;br /&gt;
** https://app.stackdriver.com/monitoring/3827/tokenserver&lt;br /&gt;
** https://app.stackdriver.com/instances/&amp;lt;AWS instance&amp;gt;&lt;br /&gt;
** Also, make use of the Services, Groups, and Dashboards for more specific links&lt;br /&gt;
*** Example: Services &amp;gt; https://app.stackdriver.com/services/nginx&lt;br /&gt;
*** Example: Groups &amp;gt; https://app.stackdriver.com/groups/4390/stage-services-tag-sync15/stage-services-sync15/tokenserver&lt;br /&gt;
&lt;br /&gt;
* Graphite:&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Kibana&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_http_status.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_http_errors.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_mysql_slow_queries.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_app_logs.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/tokenserver_http_status.json&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
** or https://heka.shared.us-east-1.stage.mozaws.net/#health&lt;br /&gt;
** Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/TokenServerHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-ActiveDailyUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-SlowQueries&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-ResponseTime&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-HTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-FrequentUsersAggregator&lt;br /&gt;
** Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-NginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-SlowQueryFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerLocalVerifierFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-FileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-NginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerNginxFileOutput&lt;br /&gt;
** Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-FileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-SlowQueryFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerLocalVerifierFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-NginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-NginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-SlowQueries/outputs/Sync-1_5-SlowQueries.Statistics.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-ResponseTime/outputs/Sync-1_5-ResponseTime.storagemetaglobal.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Heka shared:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-FrequentUsersAggregator&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-ResponseTime&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-SlowQueries&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-ActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-HTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/TokenServerHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Kibana shared: &lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/file/default.json&lt;br /&gt;
&lt;br /&gt;
* StackDriver:&lt;br /&gt;
** Main: https://app.stackdriver.com/&lt;br /&gt;
&lt;br /&gt;
== TokenServer, Verifier, and Sync 1.5 Dev Environments ==&lt;br /&gt;
* URLs&lt;br /&gt;
** https://sync1.dev.lcip.org/&lt;br /&gt;
** https://token.dev.lcip.org/&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
 TokenServer:&lt;br /&gt;
 rpm -qa | grep token&lt;br /&gt;
 Example: tokenserver-svcops &amp;lt;latest version&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Verifier:&lt;br /&gt;
 rpm -qa | grep verifier&lt;br /&gt;
 Example: fxa-browserid-verifier-svcops &amp;lt;latest version&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Server-Syncstorage (sync node):&lt;br /&gt;
 rpm -qa | grep syncstorage&lt;br /&gt;
 Example: server-syncstorage &amp;lt;latest version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is part of the dev-lcip-org CloudFormation stack&lt;br /&gt;
*** TokenServer: Search for the fxa-tokenserver instance&lt;br /&gt;
*** SyncServer2: Search for the fxa-syncstorage instance&lt;br /&gt;
*** SyncServer1: Search for the fxa-syncstorage instance&lt;br /&gt;
*** LogServer:  Search for the fxa-logbox instance&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
* QA Access&lt;br /&gt;
** SSH with AWS keys to the various instances&lt;br /&gt;
* Firefox configs:&lt;br /&gt;
** services.sync.clusterURL = https://sync1.dev.lcip.org/ (should get automatically set by the TokenServer)&lt;br /&gt;
** services.sync.tokenServerURI = https://token.dev.lcip.org/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/sync&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/token&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TSVerifierSyncTestEnvironments&amp;diff=1016143</id>
		<title>TestEngineering/Services/TSVerifierSyncTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TSVerifierSyncTestEnvironments&amp;diff=1016143"/>
		<updated>2014-09-18T02:47:30Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Monitoring the Stage Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* NOTE: We currently have two Verifier stacks in Stage (and probably Production): &lt;br /&gt;
** The standalone Browser_ID Verifier stack: See that Verifier Stage section below...&lt;br /&gt;
** A Tokenserver+Verifier stack: See the TokenServer Stage section below...&lt;br /&gt;
&lt;br /&gt;
== Tokenserver, Verifier, and Sync Production Environments ==&lt;br /&gt;
* TokenServer: https://token.services.mozilla.com&lt;br /&gt;
* Verifier: https://verifier.accounts.firefox.com&lt;br /&gt;
* Sync 1.5 Nodes (for now in AWS):&lt;br /&gt;
** sync-1-us-east-2.sync.services.mozilla.com&lt;br /&gt;
** sync-2-us-east-2.sync.services.mozilla.com&lt;br /&gt;
*** There are many more than this now...&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production FxA/Sync:&lt;br /&gt;
** Set/Verify the following Firefox configs:&lt;br /&gt;
*** services.sync.clusterURL = (should get automatically set by the TokenServer)&lt;br /&gt;
*** services.sync.tokenServerURI = https://token.services.mozilla.com/1.0/sync/1.5&lt;br /&gt;
*** services.sync.fxaccounts.enabled=true (NEW FOR NIGHTLY FF 29 - SHOULD BE SET BY DEFAULT)&lt;br /&gt;
*** services.sync.log.appender.file.logOnError = Yes&lt;br /&gt;
*** services.sync.log.appender.file.logOnSuccess = Yes&lt;br /&gt;
*** services.sync.log.appender.file.level = Trace&lt;br /&gt;
*** identity.fxaccounts.auth.uri = https://api.accounts.firefox.com/v1&lt;br /&gt;
*** identity.fxaccounts.remote.uri = https://accounts.firefox.com/?service=sync&amp;amp;context=...&lt;br /&gt;
&lt;br /&gt;
== TokenServer+Verifier Stage Environment ==&lt;br /&gt;
* NOTE: In an upcoming deployent, the Verifier functionality will be rolled into the Tokenserver stack of services.&lt;br /&gt;
&lt;br /&gt;
* URLs&lt;br /&gt;
** TokenServer: https://token.stage.mozaws.net&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net&lt;br /&gt;
** IdP: http://mockmyid.s3-website-us-west-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
* Version:&lt;br /&gt;
 TokenServer:&lt;br /&gt;
 rpm -qa | grep -E &#039;token|browser&#039;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Shared:&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-rabbitmq&lt;br /&gt;
*** shared-rabbitmq  &lt;br /&gt;
*** shared-bastion&lt;br /&gt;
*** shared-heka&lt;br /&gt;
&lt;br /&gt;
** tokenserver app server          (1 or more instances behind a CF stack and ELB)&lt;br /&gt;
** tokenserver db                  (1 large DB instance behind RDS)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/tokenserver&lt;br /&gt;
*** esp. /data/fxa-browserid-verifier/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/fxa-browserid-verifier&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
*** esp. /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa_verifier.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/tokenserver.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/tokenserver.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** tokenserver app server:&lt;br /&gt;
*** Search for token, circus, nginx, gunicorn, python, hekad, node&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.log.*&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.error.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log		(not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log		(not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.error.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stdout.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stderr.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/puppet/modules/hekad&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
== Verifier Stage Environment ==&lt;br /&gt;
* NOTE: In an upcoming deployment, the Verifier functionality will be rolled into the Tokenserver stack of services.&lt;br /&gt;
&lt;br /&gt;
* URLs&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net&lt;br /&gt;
** IdP: http://mockmyid.s3-website-us-west-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
* Version:&lt;br /&gt;
** rpm -qa | grep verifier&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Shared:&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-rabbitmq&lt;br /&gt;
*** shared-rabbitmq  &lt;br /&gt;
*** shared-bastion&lt;br /&gt;
*** shared-heka&lt;br /&gt;
&lt;br /&gt;
** fxa-browserid_verifier or fxa-bv-stage (usually a single instance)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/fxa-browserid-verifier&lt;br /&gt;
*** esp. /data/fxa-browserid-verifier/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
*** esp. the /etc/puppet/yaml/app files&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Search for node, heka, nginx, circus&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/squid/access.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stderr.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/puppet/modules/hekad&lt;br /&gt;
** /data/hekad&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
* Quick verifications&lt;br /&gt;
 Browser: https://verifier.stage.mozaws.net/&lt;br /&gt;
 returns &amp;quot;Method Not Allowed&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $ curl https://verifier.stage.mozaws.net&lt;br /&gt;
 returns &amp;quot;Method Not Allowed&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $ curl -I https://verifier.stage.mozaws.net&lt;br /&gt;
 HTTP/1.1 405 Method Not Allowed&lt;br /&gt;
 Cache-Control: no-cache, max-age=0&lt;br /&gt;
 Content-length: 18&lt;br /&gt;
 Content-Type: text/plain&lt;br /&gt;
 Date: Wed, 23 Jul 2014 20:19:40 GMT&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
== Sync 1.5 Stage Environment ==&lt;br /&gt;
* This is a work in progress. Right now, there are only a small number of sync nodes (instances) in AWS.&lt;br /&gt;
* URLs&lt;br /&gt;
** https://sync-1-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-2-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-3-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-4-us-east-1.stage.mozaws.net&lt;br /&gt;
** and sometimes&lt;br /&gt;
** https://sync-5-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-6-us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
 Server-Syncstorage (sync node):&lt;br /&gt;
 rpm -qa | grep syncstorage&lt;br /&gt;
 Example: server-syncstorage &amp;lt;latest version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Search for sync node instances in US East: &amp;quot;stage-sync-node-X&amp;quot;&lt;br /&gt;
** Each node is a specific large instance (mixed m3 and c3)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/server-syncstorage/*&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Search for sync, mysql, circusd, hekad, nginx, memcached&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/logs/nginx/access.log&lt;br /&gt;
** /media/ephemeral0/logs/nginx/error.log&lt;br /&gt;
** /media/ephemeral0/logs/sync/sync.err&lt;br /&gt;
** /media/ephemeral0/logs/sync/sync.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/sync_1_5.stderr.log&lt;br /&gt;
** /var/log/hekad/sync_1_5.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/heka.d/sync_1_5.toml&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
&lt;br /&gt;
* Note: There is no longer a Sync 1.1 Stage environment.&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* Details on the Loads V1 cluster are available at this link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Stackdriver:&lt;br /&gt;
** Stage main: https://app.stackdriver.com&lt;br /&gt;
** https://app.stackdriver.com/groups/4388/stage-services-tag-sync15&lt;br /&gt;
** https://app.stackdriver.com/groups/4389/stage-services-tag-sync15/stage-services-sync15/fxa-verifier&lt;br /&gt;
** https://app.stackdriver.com/groups/4391/stage-services-tag-sync15/stage-services-tag-sync15/sync-storage&lt;br /&gt;
** https://app.stackdriver.com/groups/4390/stage-services-tag-sync15/stage-services-sync15/tokenserver&lt;br /&gt;
** https://app.stackdriver.com/monitoring/3827/tokenserver&lt;br /&gt;
** https://app.stackdriver.com/instances/&amp;lt;AWS instance&amp;gt;&lt;br /&gt;
** Also, make use of the Services, Groups, and Dashboards for more specific links&lt;br /&gt;
*** Example: Services &amp;gt; https://app.stackdriver.com/services/nginx&lt;br /&gt;
*** Example: Groups &amp;gt; https://app.stackdriver.com/groups/4390/stage-services-tag-sync15/stage-services-sync15/tokenserver&lt;br /&gt;
&lt;br /&gt;
* Graphite:&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Kibana&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_http_status.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_http_errors.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_mysql_slow_queries.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_app_logs.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/tokenserver_http_status.json&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
** or https://heka.shared.us-east-1.stage.mozaws.net/#health&lt;br /&gt;
** Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/TokenServerHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-ActiveDailyUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-SlowQueries&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-ResponseTime&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-HTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-FrequentUsersAggregator&lt;br /&gt;
** Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-NginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-SlowQueryFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerLocalVerifierFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-FileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-NginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerNginxFileOutput&lt;br /&gt;
** Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-FileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-SlowQueryFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerLocalVerifierFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-NginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-NginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-SlowQueries/outputs/Sync-1_5-SlowQueries.Statistics.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-ResponseTime/outputs/Sync-1_5-ResponseTime.storagemetaglobal.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Heka shared:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-FrequentUsersAggregator&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-ResponseTime&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-SlowQueries&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-ActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-HTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/TokenServerHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Kibana shared: &lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/file/default.json&lt;br /&gt;
&lt;br /&gt;
* StackDriver:&lt;br /&gt;
** Main: https://app.stackdriver.com/&lt;br /&gt;
&lt;br /&gt;
== TokenServer, Verifier, and Sync 1.5 Dev Environments ==&lt;br /&gt;
* URLs&lt;br /&gt;
** https://sync1.dev.lcip.org/&lt;br /&gt;
** https://token.dev.lcip.org/&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
 TokenServer:&lt;br /&gt;
 rpm -qa | grep token&lt;br /&gt;
 Example: tokenserver-svcops &amp;lt;latest version&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Verifier:&lt;br /&gt;
 rpm -qa | grep verifier&lt;br /&gt;
 Example: fxa-browserid-verifier-svcops &amp;lt;latest version&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Server-Syncstorage (sync node):&lt;br /&gt;
 rpm -qa | grep syncstorage&lt;br /&gt;
 Example: server-syncstorage &amp;lt;latest version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is part of the dev-lcip-org CloudFormation stack&lt;br /&gt;
*** TokenServer: Search for the fxa-tokenserver instance&lt;br /&gt;
*** SyncServer2: Search for the fxa-syncstorage instance&lt;br /&gt;
*** SyncServer1: Search for the fxa-syncstorage instance&lt;br /&gt;
*** LogServer:  Search for the fxa-logbox instance&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
* QA Access&lt;br /&gt;
** SSH with AWS keys to the various instances&lt;br /&gt;
* Firefox configs:&lt;br /&gt;
** services.sync.clusterURL = https://sync1.dev.lcip.org/ (should get automatically set by the TokenServer)&lt;br /&gt;
** services.sync.tokenServerURI = https://token.dev.lcip.org/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/sync&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/token&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TSVerifierSyncTestEnvironments&amp;diff=1016142</id>
		<title>TestEngineering/Services/TSVerifierSyncTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TSVerifierSyncTestEnvironments&amp;diff=1016142"/>
		<updated>2014-09-18T02:42:07Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Monitoring the Stage Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* NOTE: We currently have two Verifier stacks in Stage (and probably Production): &lt;br /&gt;
** The standalone Browser_ID Verifier stack: See that Verifier Stage section below...&lt;br /&gt;
** A Tokenserver+Verifier stack: See the TokenServer Stage section below...&lt;br /&gt;
&lt;br /&gt;
== Tokenserver, Verifier, and Sync Production Environments ==&lt;br /&gt;
* TokenServer: https://token.services.mozilla.com&lt;br /&gt;
* Verifier: https://verifier.accounts.firefox.com&lt;br /&gt;
* Sync 1.5 Nodes (for now in AWS):&lt;br /&gt;
** sync-1-us-east-2.sync.services.mozilla.com&lt;br /&gt;
** sync-2-us-east-2.sync.services.mozilla.com&lt;br /&gt;
*** There are many more than this now...&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production FxA/Sync:&lt;br /&gt;
** Set/Verify the following Firefox configs:&lt;br /&gt;
*** services.sync.clusterURL = (should get automatically set by the TokenServer)&lt;br /&gt;
*** services.sync.tokenServerURI = https://token.services.mozilla.com/1.0/sync/1.5&lt;br /&gt;
*** services.sync.fxaccounts.enabled=true (NEW FOR NIGHTLY FF 29 - SHOULD BE SET BY DEFAULT)&lt;br /&gt;
*** services.sync.log.appender.file.logOnError = Yes&lt;br /&gt;
*** services.sync.log.appender.file.logOnSuccess = Yes&lt;br /&gt;
*** services.sync.log.appender.file.level = Trace&lt;br /&gt;
*** identity.fxaccounts.auth.uri = https://api.accounts.firefox.com/v1&lt;br /&gt;
*** identity.fxaccounts.remote.uri = https://accounts.firefox.com/?service=sync&amp;amp;context=...&lt;br /&gt;
&lt;br /&gt;
== TokenServer+Verifier Stage Environment ==&lt;br /&gt;
* NOTE: In an upcoming deployent, the Verifier functionality will be rolled into the Tokenserver stack of services.&lt;br /&gt;
&lt;br /&gt;
* URLs&lt;br /&gt;
** TokenServer: https://token.stage.mozaws.net&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net&lt;br /&gt;
** IdP: http://mockmyid.s3-website-us-west-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
* Version:&lt;br /&gt;
 TokenServer:&lt;br /&gt;
 rpm -qa | grep -E &#039;token|browser&#039;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Shared:&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-rabbitmq&lt;br /&gt;
*** shared-rabbitmq  &lt;br /&gt;
*** shared-bastion&lt;br /&gt;
*** shared-heka&lt;br /&gt;
&lt;br /&gt;
** tokenserver app server          (1 or more instances behind a CF stack and ELB)&lt;br /&gt;
** tokenserver db                  (1 large DB instance behind RDS)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/tokenserver&lt;br /&gt;
*** esp. /data/fxa-browserid-verifier/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/fxa-browserid-verifier&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
*** esp. /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa_verifier.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/tokenserver.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/tokenserver.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** tokenserver app server:&lt;br /&gt;
*** Search for token, circus, nginx, gunicorn, python, hekad, node&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.log.*&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.error.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log		(not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log		(not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.error.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stdout.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stderr.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/puppet/modules/hekad&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
== Verifier Stage Environment ==&lt;br /&gt;
* NOTE: In an upcoming deployment, the Verifier functionality will be rolled into the Tokenserver stack of services.&lt;br /&gt;
&lt;br /&gt;
* URLs&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net&lt;br /&gt;
** IdP: http://mockmyid.s3-website-us-west-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
* Version:&lt;br /&gt;
** rpm -qa | grep verifier&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Shared:&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-rabbitmq&lt;br /&gt;
*** shared-rabbitmq  &lt;br /&gt;
*** shared-bastion&lt;br /&gt;
*** shared-heka&lt;br /&gt;
&lt;br /&gt;
** fxa-browserid_verifier or fxa-bv-stage (usually a single instance)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/fxa-browserid-verifier&lt;br /&gt;
*** esp. /data/fxa-browserid-verifier/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
*** esp. the /etc/puppet/yaml/app files&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Search for node, heka, nginx, circus&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/squid/access.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stderr.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/puppet/modules/hekad&lt;br /&gt;
** /data/hekad&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
* Quick verifications&lt;br /&gt;
 Browser: https://verifier.stage.mozaws.net/&lt;br /&gt;
 returns &amp;quot;Method Not Allowed&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $ curl https://verifier.stage.mozaws.net&lt;br /&gt;
 returns &amp;quot;Method Not Allowed&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $ curl -I https://verifier.stage.mozaws.net&lt;br /&gt;
 HTTP/1.1 405 Method Not Allowed&lt;br /&gt;
 Cache-Control: no-cache, max-age=0&lt;br /&gt;
 Content-length: 18&lt;br /&gt;
 Content-Type: text/plain&lt;br /&gt;
 Date: Wed, 23 Jul 2014 20:19:40 GMT&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
== Sync 1.5 Stage Environment ==&lt;br /&gt;
* This is a work in progress. Right now, there are only a small number of sync nodes (instances) in AWS.&lt;br /&gt;
* URLs&lt;br /&gt;
** https://sync-1-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-2-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-3-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-4-us-east-1.stage.mozaws.net&lt;br /&gt;
** and sometimes&lt;br /&gt;
** https://sync-5-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-6-us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
 Server-Syncstorage (sync node):&lt;br /&gt;
 rpm -qa | grep syncstorage&lt;br /&gt;
 Example: server-syncstorage &amp;lt;latest version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Search for sync node instances in US East: &amp;quot;stage-sync-node-X&amp;quot;&lt;br /&gt;
** Each node is a specific large instance (mixed m3 and c3)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/server-syncstorage/*&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Search for sync, mysql, circusd, hekad, nginx, memcached&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/logs/nginx/access.log&lt;br /&gt;
** /media/ephemeral0/logs/nginx/error.log&lt;br /&gt;
** /media/ephemeral0/logs/sync/sync.err&lt;br /&gt;
** /media/ephemeral0/logs/sync/sync.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/sync_1_5.stderr.log&lt;br /&gt;
** /var/log/hekad/sync_1_5.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/heka.d/sync_1_5.toml&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
&lt;br /&gt;
* Note: There is no longer a Sync 1.1 Stage environment.&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* Details on the Loads V1 cluster are available at this link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Stackdriver:&lt;br /&gt;
** Stage main: https://app.stackdriver.com&lt;br /&gt;
** https://app.stackdriver.com/groups/4388/stage-services-tag-sync15&lt;br /&gt;
** https://app.stackdriver.com/groups/4389/stage-services-tag-sync15/stage-services-sync15/fxa-verifier&lt;br /&gt;
** https://app.stackdriver.com/groups/4391/stage-services-tag-sync15/stage-services-tag-sync15/sync-storage&lt;br /&gt;
** https://app.stackdriver.com/groups/4390/stage-services-tag-sync15/stage-services-sync15/tokenserver&lt;br /&gt;
** https://app.stackdriver.com/monitoring/3827/tokenserver&lt;br /&gt;
** https://app.stackdriver.com/instances/&amp;lt;AWS instance&amp;gt;&lt;br /&gt;
** Also, make use of the Services, Groups, and Dashboards for more specific links&lt;br /&gt;
*** Example: Services &amp;gt; https://app.stackdriver.com/services/nginx&lt;br /&gt;
*** Example: Groups &amp;gt; https://app.stackdriver.com/groups/4390/stage-services-tag-sync15/stage-services-sync15/tokenserver&lt;br /&gt;
&lt;br /&gt;
* Graphite:&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Kibana&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_http_status.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_http_errors.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_mysql_slow_queries.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_app_logs.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/tokenserver_http_status.json&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
** or https://heka.shared.us-east-1.stage.mozaws.net/#health&lt;br /&gt;
** Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/TokenServerHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-ActiveDailyUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-SlowQueries&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-ResponseTime&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-HTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-FrequentUsersAggregator&lt;br /&gt;
** Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-NginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-SlowQueryFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerLocalVerifierFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-FileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-NginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerNginxFileOutput&lt;br /&gt;
** Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-FileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-SlowQueryFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerLocalVerifierFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/TokenServerFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-NginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/Sync-1_5-NginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-SlowQueries/outputs/Sync-1_5-SlowQueries.Statistics.cbuf&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-HTTPStatus/outputs/Sync-1_5-HTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-ResponseTime/outputs/Sync-1_5-ResponseTime.storagehistory.cbuf&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-ResponseTime/outputs/Sync-1_5-ResponseTime.storagebookmarks.cbuf&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-ResponseTime/outputs/Sync-1_5-ResponseTime.storageforms.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Heka shared:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-FrequentUsersAggregator&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-ResponseTime&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-SlowQueries&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-ActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-HTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/TokenServerHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Kibana shared: &lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/file/default.json&lt;br /&gt;
&lt;br /&gt;
* StackDriver:&lt;br /&gt;
** Main: https://app.stackdriver.com/&lt;br /&gt;
&lt;br /&gt;
== TokenServer, Verifier, and Sync 1.5 Dev Environments ==&lt;br /&gt;
* URLs&lt;br /&gt;
** https://sync1.dev.lcip.org/&lt;br /&gt;
** https://token.dev.lcip.org/&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
 TokenServer:&lt;br /&gt;
 rpm -qa | grep token&lt;br /&gt;
 Example: tokenserver-svcops &amp;lt;latest version&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Verifier:&lt;br /&gt;
 rpm -qa | grep verifier&lt;br /&gt;
 Example: fxa-browserid-verifier-svcops &amp;lt;latest version&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Server-Syncstorage (sync node):&lt;br /&gt;
 rpm -qa | grep syncstorage&lt;br /&gt;
 Example: server-syncstorage &amp;lt;latest version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is part of the dev-lcip-org CloudFormation stack&lt;br /&gt;
*** TokenServer: Search for the fxa-tokenserver instance&lt;br /&gt;
*** SyncServer2: Search for the fxa-syncstorage instance&lt;br /&gt;
*** SyncServer1: Search for the fxa-syncstorage instance&lt;br /&gt;
*** LogServer:  Search for the fxa-logbox instance&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
* QA Access&lt;br /&gt;
** SSH with AWS keys to the various instances&lt;br /&gt;
* Firefox configs:&lt;br /&gt;
** services.sync.clusterURL = https://sync1.dev.lcip.org/ (should get automatically set by the TokenServer)&lt;br /&gt;
** services.sync.tokenServerURI = https://token.dev.lcip.org/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/sync&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/token&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TSVerifierSyncTestEnvironments&amp;diff=1016140</id>
		<title>TestEngineering/Services/TSVerifierSyncTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TSVerifierSyncTestEnvironments&amp;diff=1016140"/>
		<updated>2014-09-18T02:39:45Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Monitoring the Stage Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* NOTE: We currently have two Verifier stacks in Stage (and probably Production): &lt;br /&gt;
** The standalone Browser_ID Verifier stack: See that Verifier Stage section below...&lt;br /&gt;
** A Tokenserver+Verifier stack: See the TokenServer Stage section below...&lt;br /&gt;
&lt;br /&gt;
== Tokenserver, Verifier, and Sync Production Environments ==&lt;br /&gt;
* TokenServer: https://token.services.mozilla.com&lt;br /&gt;
* Verifier: https://verifier.accounts.firefox.com&lt;br /&gt;
* Sync 1.5 Nodes (for now in AWS):&lt;br /&gt;
** sync-1-us-east-2.sync.services.mozilla.com&lt;br /&gt;
** sync-2-us-east-2.sync.services.mozilla.com&lt;br /&gt;
*** There are many more than this now...&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production FxA/Sync:&lt;br /&gt;
** Set/Verify the following Firefox configs:&lt;br /&gt;
*** services.sync.clusterURL = (should get automatically set by the TokenServer)&lt;br /&gt;
*** services.sync.tokenServerURI = https://token.services.mozilla.com/1.0/sync/1.5&lt;br /&gt;
*** services.sync.fxaccounts.enabled=true (NEW FOR NIGHTLY FF 29 - SHOULD BE SET BY DEFAULT)&lt;br /&gt;
*** services.sync.log.appender.file.logOnError = Yes&lt;br /&gt;
*** services.sync.log.appender.file.logOnSuccess = Yes&lt;br /&gt;
*** services.sync.log.appender.file.level = Trace&lt;br /&gt;
*** identity.fxaccounts.auth.uri = https://api.accounts.firefox.com/v1&lt;br /&gt;
*** identity.fxaccounts.remote.uri = https://accounts.firefox.com/?service=sync&amp;amp;context=...&lt;br /&gt;
&lt;br /&gt;
== TokenServer+Verifier Stage Environment ==&lt;br /&gt;
* NOTE: In an upcoming deployent, the Verifier functionality will be rolled into the Tokenserver stack of services.&lt;br /&gt;
&lt;br /&gt;
* URLs&lt;br /&gt;
** TokenServer: https://token.stage.mozaws.net&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net&lt;br /&gt;
** IdP: http://mockmyid.s3-website-us-west-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
* Version:&lt;br /&gt;
 TokenServer:&lt;br /&gt;
 rpm -qa | grep -E &#039;token|browser&#039;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Shared:&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-rabbitmq&lt;br /&gt;
*** shared-rabbitmq  &lt;br /&gt;
*** shared-bastion&lt;br /&gt;
*** shared-heka&lt;br /&gt;
&lt;br /&gt;
** tokenserver app server          (1 or more instances behind a CF stack and ELB)&lt;br /&gt;
** tokenserver db                  (1 large DB instance behind RDS)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/tokenserver&lt;br /&gt;
*** esp. /data/fxa-browserid-verifier/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/fxa-browserid-verifier&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
*** esp. /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa_verifier.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/tokenserver.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/tokenserver.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** tokenserver app server:&lt;br /&gt;
*** Search for token, circus, nginx, gunicorn, python, hekad, node&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.log.*&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.error.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log		(not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log		(not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.error.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stdout.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stderr.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/puppet/modules/hekad&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
== Verifier Stage Environment ==&lt;br /&gt;
* NOTE: In an upcoming deployment, the Verifier functionality will be rolled into the Tokenserver stack of services.&lt;br /&gt;
&lt;br /&gt;
* URLs&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net&lt;br /&gt;
** IdP: http://mockmyid.s3-website-us-west-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
* Version:&lt;br /&gt;
** rpm -qa | grep verifier&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Shared:&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-rabbitmq&lt;br /&gt;
*** shared-rabbitmq  &lt;br /&gt;
*** shared-bastion&lt;br /&gt;
*** shared-heka&lt;br /&gt;
&lt;br /&gt;
** fxa-browserid_verifier or fxa-bv-stage (usually a single instance)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/fxa-browserid-verifier&lt;br /&gt;
*** esp. /data/fxa-browserid-verifier/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
*** esp. the /etc/puppet/yaml/app files&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Search for node, heka, nginx, circus&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/squid/access.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stderr.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/puppet/modules/hekad&lt;br /&gt;
** /data/hekad&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
* Quick verifications&lt;br /&gt;
 Browser: https://verifier.stage.mozaws.net/&lt;br /&gt;
 returns &amp;quot;Method Not Allowed&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $ curl https://verifier.stage.mozaws.net&lt;br /&gt;
 returns &amp;quot;Method Not Allowed&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $ curl -I https://verifier.stage.mozaws.net&lt;br /&gt;
 HTTP/1.1 405 Method Not Allowed&lt;br /&gt;
 Cache-Control: no-cache, max-age=0&lt;br /&gt;
 Content-length: 18&lt;br /&gt;
 Content-Type: text/plain&lt;br /&gt;
 Date: Wed, 23 Jul 2014 20:19:40 GMT&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
== Sync 1.5 Stage Environment ==&lt;br /&gt;
* This is a work in progress. Right now, there are only a small number of sync nodes (instances) in AWS.&lt;br /&gt;
* URLs&lt;br /&gt;
** https://sync-1-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-2-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-3-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-4-us-east-1.stage.mozaws.net&lt;br /&gt;
** and sometimes&lt;br /&gt;
** https://sync-5-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-6-us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
 Server-Syncstorage (sync node):&lt;br /&gt;
 rpm -qa | grep syncstorage&lt;br /&gt;
 Example: server-syncstorage &amp;lt;latest version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Search for sync node instances in US East: &amp;quot;stage-sync-node-X&amp;quot;&lt;br /&gt;
** Each node is a specific large instance (mixed m3 and c3)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/server-syncstorage/*&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Search for sync, mysql, circusd, hekad, nginx, memcached&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/logs/nginx/access.log&lt;br /&gt;
** /media/ephemeral0/logs/nginx/error.log&lt;br /&gt;
** /media/ephemeral0/logs/sync/sync.err&lt;br /&gt;
** /media/ephemeral0/logs/sync/sync.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/sync_1_5.stderr.log&lt;br /&gt;
** /var/log/hekad/sync_1_5.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/heka.d/sync_1_5.toml&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
&lt;br /&gt;
* Note: There is no longer a Sync 1.1 Stage environment.&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* Details on the Loads V1 cluster are available at this link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Stackdriver:&lt;br /&gt;
** Stage main: https://app.stackdriver.com&lt;br /&gt;
** https://app.stackdriver.com/groups/4388/stage-services-tag-sync15&lt;br /&gt;
** https://app.stackdriver.com/groups/4389/stage-services-tag-sync15/stage-services-sync15/fxa-verifier&lt;br /&gt;
** https://app.stackdriver.com/groups/4391/stage-services-tag-sync15/stage-services-tag-sync15/sync-storage&lt;br /&gt;
** https://app.stackdriver.com/groups/4390/stage-services-tag-sync15/stage-services-sync15/tokenserver&lt;br /&gt;
** https://app.stackdriver.com/monitoring/3827/tokenserver&lt;br /&gt;
** https://app.stackdriver.com/instances/&amp;lt;AWS instance&amp;gt;&lt;br /&gt;
** Also, make use of the Services, Groups, and Dashboards for more specific links&lt;br /&gt;
*** Example: Services &amp;gt; https://app.stackdriver.com/services/nginx&lt;br /&gt;
*** Example: Groups &amp;gt; https://app.stackdriver.com/groups/4390/stage-services-tag-sync15/stage-services-sync15/tokenserver&lt;br /&gt;
&lt;br /&gt;
* Graphite:&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Kibana&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_http_status.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_http_errors.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_mysql_slow_queries.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_app_logs.json&lt;br /&gt;
&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/tokenserver_http_status.json&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
** or https://heka.shared.us-east-1.stage.mozaws.net/#health&lt;br /&gt;
** Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/TokenServerHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-ActiveDailyUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-SlowQueries&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-ResponseTime&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-HTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/Sync-1_5-FrequentUsersAggregator&lt;br /&gt;
&lt;br /&gt;
** Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-NginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-SlowQueryFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerLocalVerifierFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-FileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/Sync-1_5-NginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/TokenServerNginxFileOutput&lt;br /&gt;
&lt;br /&gt;
** Encoders&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
** Sandboxes&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-SlowQueries/outputs/Sync-1_5-SlowQueries.Statistics.cbuf&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-HTTPStatus/outputs/Sync-1_5-HTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-ResponseTime/outputs/Sync-1_5-ResponseTime.storagehistory.cbuf&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-ResponseTime/outputs/Sync-1_5-ResponseTime.storagebookmarks.cbuf&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-ResponseTime/outputs/Sync-1_5-ResponseTime.storageforms.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Heka shared:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-FrequentUsersAggregator&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-ResponseTime&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-SlowQueries&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-ActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-HTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/TokenServerHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Kibana shared: &lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/file/default.json&lt;br /&gt;
&lt;br /&gt;
* StackDriver:&lt;br /&gt;
** Main: https://app.stackdriver.com/&lt;br /&gt;
&lt;br /&gt;
== TokenServer, Verifier, and Sync 1.5 Dev Environments ==&lt;br /&gt;
* URLs&lt;br /&gt;
** https://sync1.dev.lcip.org/&lt;br /&gt;
** https://token.dev.lcip.org/&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
 TokenServer:&lt;br /&gt;
 rpm -qa | grep token&lt;br /&gt;
 Example: tokenserver-svcops &amp;lt;latest version&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Verifier:&lt;br /&gt;
 rpm -qa | grep verifier&lt;br /&gt;
 Example: fxa-browserid-verifier-svcops &amp;lt;latest version&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Server-Syncstorage (sync node):&lt;br /&gt;
 rpm -qa | grep syncstorage&lt;br /&gt;
 Example: server-syncstorage &amp;lt;latest version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is part of the dev-lcip-org CloudFormation stack&lt;br /&gt;
*** TokenServer: Search for the fxa-tokenserver instance&lt;br /&gt;
*** SyncServer2: Search for the fxa-syncstorage instance&lt;br /&gt;
*** SyncServer1: Search for the fxa-syncstorage instance&lt;br /&gt;
*** LogServer:  Search for the fxa-logbox instance&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
* QA Access&lt;br /&gt;
** SSH with AWS keys to the various instances&lt;br /&gt;
* Firefox configs:&lt;br /&gt;
** services.sync.clusterURL = https://sync1.dev.lcip.org/ (should get automatically set by the TokenServer)&lt;br /&gt;
** services.sync.tokenServerURI = https://token.dev.lcip.org/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/sync&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/token&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TSVerifierSyncTestEnvironments&amp;diff=1016139</id>
		<title>TestEngineering/Services/TSVerifierSyncTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TSVerifierSyncTestEnvironments&amp;diff=1016139"/>
		<updated>2014-09-18T02:33:17Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Monitoring the Stage Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* NOTE: We currently have two Verifier stacks in Stage (and probably Production): &lt;br /&gt;
** The standalone Browser_ID Verifier stack: See that Verifier Stage section below...&lt;br /&gt;
** A Tokenserver+Verifier stack: See the TokenServer Stage section below...&lt;br /&gt;
&lt;br /&gt;
== Tokenserver, Verifier, and Sync Production Environments ==&lt;br /&gt;
* TokenServer: https://token.services.mozilla.com&lt;br /&gt;
* Verifier: https://verifier.accounts.firefox.com&lt;br /&gt;
* Sync 1.5 Nodes (for now in AWS):&lt;br /&gt;
** sync-1-us-east-2.sync.services.mozilla.com&lt;br /&gt;
** sync-2-us-east-2.sync.services.mozilla.com&lt;br /&gt;
*** There are many more than this now...&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production FxA/Sync:&lt;br /&gt;
** Set/Verify the following Firefox configs:&lt;br /&gt;
*** services.sync.clusterURL = (should get automatically set by the TokenServer)&lt;br /&gt;
*** services.sync.tokenServerURI = https://token.services.mozilla.com/1.0/sync/1.5&lt;br /&gt;
*** services.sync.fxaccounts.enabled=true (NEW FOR NIGHTLY FF 29 - SHOULD BE SET BY DEFAULT)&lt;br /&gt;
*** services.sync.log.appender.file.logOnError = Yes&lt;br /&gt;
*** services.sync.log.appender.file.logOnSuccess = Yes&lt;br /&gt;
*** services.sync.log.appender.file.level = Trace&lt;br /&gt;
*** identity.fxaccounts.auth.uri = https://api.accounts.firefox.com/v1&lt;br /&gt;
*** identity.fxaccounts.remote.uri = https://accounts.firefox.com/?service=sync&amp;amp;context=...&lt;br /&gt;
&lt;br /&gt;
== TokenServer+Verifier Stage Environment ==&lt;br /&gt;
* NOTE: In an upcoming deployent, the Verifier functionality will be rolled into the Tokenserver stack of services.&lt;br /&gt;
&lt;br /&gt;
* URLs&lt;br /&gt;
** TokenServer: https://token.stage.mozaws.net&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net&lt;br /&gt;
** IdP: http://mockmyid.s3-website-us-west-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
* Version:&lt;br /&gt;
 TokenServer:&lt;br /&gt;
 rpm -qa | grep -E &#039;token|browser&#039;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Shared:&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-rabbitmq&lt;br /&gt;
*** shared-rabbitmq  &lt;br /&gt;
*** shared-bastion&lt;br /&gt;
*** shared-heka&lt;br /&gt;
&lt;br /&gt;
** tokenserver app server          (1 or more instances behind a CF stack and ELB)&lt;br /&gt;
** tokenserver db                  (1 large DB instance behind RDS)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/tokenserver&lt;br /&gt;
*** esp. /data/fxa-browserid-verifier/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/fxa-browserid-verifier&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
*** esp. /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa_verifier.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/tokenserver.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/tokenserver.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** tokenserver app server:&lt;br /&gt;
*** Search for token, circus, nginx, gunicorn, python, hekad, node&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.log.*&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.error.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log		(not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log		(not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.error.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stdout.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stderr.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/puppet/modules/hekad&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
== Verifier Stage Environment ==&lt;br /&gt;
* NOTE: In an upcoming deployment, the Verifier functionality will be rolled into the Tokenserver stack of services.&lt;br /&gt;
&lt;br /&gt;
* URLs&lt;br /&gt;
** Verifier: https://verifier.stage.mozaws.net&lt;br /&gt;
** IdP: http://mockmyid.s3-website-us-west-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
* Version:&lt;br /&gt;
** rpm -qa | grep verifier&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Shared:&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-elasticsearch&lt;br /&gt;
*** shared-rabbitmq&lt;br /&gt;
*** shared-rabbitmq  &lt;br /&gt;
*** shared-bastion&lt;br /&gt;
*** shared-heka&lt;br /&gt;
&lt;br /&gt;
** fxa-browserid_verifier or fxa-bv-stage (usually a single instance)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/fxa-browserid-verifier&lt;br /&gt;
*** esp. /data/fxa-browserid-verifier/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
*** esp. the /etc/puppet/yaml/app files&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/fxa.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Search for node, heka, nginx, circus&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/squid/access.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stderr.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/puppet/modules/hekad&lt;br /&gt;
** /data/hekad&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
** services.sync.tokenServerURI = https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
* Quick verifications&lt;br /&gt;
 Browser: https://verifier.stage.mozaws.net/&lt;br /&gt;
 returns &amp;quot;Method Not Allowed&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $ curl https://verifier.stage.mozaws.net&lt;br /&gt;
 returns &amp;quot;Method Not Allowed&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $ curl -I https://verifier.stage.mozaws.net&lt;br /&gt;
 HTTP/1.1 405 Method Not Allowed&lt;br /&gt;
 Cache-Control: no-cache, max-age=0&lt;br /&gt;
 Content-length: 18&lt;br /&gt;
 Content-Type: text/plain&lt;br /&gt;
 Date: Wed, 23 Jul 2014 20:19:40 GMT&lt;br /&gt;
 Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
== Sync 1.5 Stage Environment ==&lt;br /&gt;
* This is a work in progress. Right now, there are only a small number of sync nodes (instances) in AWS.&lt;br /&gt;
* URLs&lt;br /&gt;
** https://sync-1-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-2-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-3-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-4-us-east-1.stage.mozaws.net&lt;br /&gt;
** and sometimes&lt;br /&gt;
** https://sync-5-us-east-1.stage.mozaws.net&lt;br /&gt;
** https://sync-6-us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
 Server-Syncstorage (sync node):&lt;br /&gt;
 rpm -qa | grep syncstorage&lt;br /&gt;
 Example: server-syncstorage &amp;lt;latest version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** Search for sync node instances in US East: &amp;quot;stage-sync-node-X&amp;quot;&lt;br /&gt;
** Each node is a specific large instance (mixed m3 and c3)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/server-syncstorage/*&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** /etc/puppet&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Search for sync, mysql, circusd, hekad, nginx, memcached&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/logs/nginx/access.log&lt;br /&gt;
** /media/ephemeral0/logs/nginx/error.log&lt;br /&gt;
** /media/ephemeral0/logs/sync/sync.err&lt;br /&gt;
** /media/ephemeral0/logs/sync/sync.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/sync_1_5.stderr.log&lt;br /&gt;
** /var/log/hekad/sync_1_5.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Hekad&lt;br /&gt;
** /etc/heka.d/sync_1_5.toml&lt;br /&gt;
&lt;br /&gt;
* QA Access via a Bastion Host&lt;br /&gt;
** SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance.&lt;br /&gt;
&lt;br /&gt;
* Firefox Configs&lt;br /&gt;
** services.sync.clusterURL should get automatically set by the TokenServer&lt;br /&gt;
&lt;br /&gt;
* Note: There is no longer a Sync 1.1 Stage environment.&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* Details on the Loads V1 cluster are available at this link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Stackdriver:&lt;br /&gt;
** Stage main: https://app.stackdriver.com&lt;br /&gt;
** https://app.stackdriver.com/groups/4388/stage-services-tag-sync15&lt;br /&gt;
** https://app.stackdriver.com/groups/4389/stage-services-tag-sync15/stage-services-sync15/fxa-verifier&lt;br /&gt;
** https://app.stackdriver.com/groups/4391/stage-services-tag-sync15/stage-services-tag-sync15/sync-storage&lt;br /&gt;
** https://app.stackdriver.com/groups/4390/stage-services-tag-sync15/stage-services-sync15/tokenserver&lt;br /&gt;
** https://app.stackdriver.com/monitoring/3827/tokenserver&lt;br /&gt;
** https://app.stackdriver.com/instances/&amp;lt;AWS instance&amp;gt;&lt;br /&gt;
** Also, make use of the Services, Groups, and Dashboards for more specific links&lt;br /&gt;
*** Example: Services &amp;gt; https://app.stackdriver.com/services/nginx&lt;br /&gt;
*** Example: Groups &amp;gt; https://app.stackdriver.com/groups/4390/stage-services-tag-sync15/stage-services-sync15/tokenserver&lt;br /&gt;
&lt;br /&gt;
* Graphite:&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Kibana&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_http_status.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_http_errors.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_mysql_slow_queries.json&lt;br /&gt;
https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/sync_app_logs.json&lt;br /&gt;
&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/tokenserver_http_status.json&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#health&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-SlowQueries/outputs/Sync-1_5-SlowQueries.Statistics.cbuf&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-HTTPStatus/outputs/Sync-1_5-HTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-ResponseTime/outputs/Sync-1_5-ResponseTime.storagehistory.cbuf&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-ResponseTime/outputs/Sync-1_5-ResponseTime.storagebookmarks.cbuf&lt;br /&gt;
** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/Sync-1_5-ResponseTime/outputs/Sync-1_5-ResponseTime.storageforms.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Heka shared:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-FrequentUsersAggregator&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-ResponseTime&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-SlowQueries&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-ActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/Sync-1_5-HTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/TokenServerHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Kibana shared: &lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/file/default.json&lt;br /&gt;
&lt;br /&gt;
* StackDriver:&lt;br /&gt;
** Main: https://app.stackdriver.com/&lt;br /&gt;
&lt;br /&gt;
== TokenServer, Verifier, and Sync 1.5 Dev Environments ==&lt;br /&gt;
* URLs&lt;br /&gt;
** https://sync1.dev.lcip.org/&lt;br /&gt;
** https://token.dev.lcip.org/&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
 TokenServer:&lt;br /&gt;
 rpm -qa | grep token&lt;br /&gt;
 Example: tokenserver-svcops &amp;lt;latest version&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Verifier:&lt;br /&gt;
 rpm -qa | grep verifier&lt;br /&gt;
 Example: fxa-browserid-verifier-svcops &amp;lt;latest version&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Server-Syncstorage (sync node):&lt;br /&gt;
 rpm -qa | grep syncstorage&lt;br /&gt;
 Example: server-syncstorage &amp;lt;latest version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is part of the dev-lcip-org CloudFormation stack&lt;br /&gt;
*** TokenServer: Search for the fxa-tokenserver instance&lt;br /&gt;
*** SyncServer2: Search for the fxa-syncstorage instance&lt;br /&gt;
*** SyncServer1: Search for the fxa-syncstorage instance&lt;br /&gt;
*** LogServer:  Search for the fxa-logbox instance&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
* QA Access&lt;br /&gt;
** SSH with AWS keys to the various instances&lt;br /&gt;
* Firefox configs:&lt;br /&gt;
** services.sync.clusterURL = https://sync1.dev.lcip.org/ (should get automatically set by the TokenServer)&lt;br /&gt;
** services.sync.tokenServerURI = https://token.dev.lcip.org/1.0/sync/1.5&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/sync&lt;br /&gt;
** and https://github.com/mozilla-services/svcops/tree/master/cloudformations/token&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1016081</id>
		<title>TestEngineering/Services/LoopTestEnvironments</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/LoopTestEnvironments&amp;diff=1016081"/>
		<updated>2014-09-17T22:30:49Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Loop Server Stage Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Loop Server Production Environments ==&lt;br /&gt;
* Loop-Server: https://loop.services.mozilla.com&lt;br /&gt;
* Loop-Client: https://call.mozilla.com&lt;br /&gt;
* MSISDN Gateway: https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
** See below: https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Monitoring_the_Production_Environment&lt;br /&gt;
&lt;br /&gt;
* QA Access: not allowed&lt;br /&gt;
&lt;br /&gt;
* Pointing Fx Nightly to Production&lt;br /&gt;
** NOTE: Fx Nightly is already set to point to Production by default&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 Loop-Server&lt;br /&gt;
 In the browser: https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl https://loop.services.mozilla.com&lt;br /&gt;
 Note: the default value of &amp;quot;fakeTokBox&amp;quot; is true for the mock server, false for the live server&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
 Loop-Client&lt;br /&gt;
 In the browser: https://call.mozilla.com&lt;br /&gt;
 Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 Browser: https://call.mozilla.com/config.js&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://loop.services.mozilla.com&#039;};&lt;br /&gt;
 &lt;br /&gt;
 Browser: Browser: https://call.mozilla.com/VERSION.txt&lt;br /&gt;
 &lt;br /&gt;
 curl https://call.mozilla.com/&lt;br /&gt;
 returns a page of HTML&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.mozilla.com/&lt;br /&gt;
&lt;br /&gt;
 MSISDN-Gateway&lt;br /&gt;
 Browser: https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN  &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.services.mozilla.com&lt;br /&gt;
 {&amp;quot;name&amp;quot;:&amp;quot;mozilla-msisdn-gateway&amp;quot;,&amp;quot;description&amp;quot;:&amp;quot;The Mozilla MSISDN &lt;br /&gt;
 Gateway&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;0.3.2&amp;quot;,&amp;quot;homepage&amp;quot;:&amp;quot;https://github.com/mozilla-services/msisdn-gateway&amp;quot;&lt;br /&gt;
 ,&amp;quot;endpoint&amp;quot;:&amp;quot;https://msisdn.services.mozilla.com&amp;quot;}&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
** Mock (load): https://loop-delayed-response.stage.mozaws.net (see below)&lt;br /&gt;
** Third-Party (load): TBD&lt;br /&gt;
&lt;br /&gt;
** loop-redis-stage - need the details&lt;br /&gt;
&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** MSISDN: https://msisdn.stage.mozaws.net (see below)&lt;br /&gt;
** Mock (load): http://omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
** Sentry: https://sentry.shared.us-east-1.stage.mozaws.net (see below)&lt;br /&gt;
&lt;br /&gt;
== Loop Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Server: https://loop.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
** Example:&lt;br /&gt;
*** loop-server-svcops 0.10.0-1 x86_64 20905864&lt;br /&gt;
*** puppet-config-loop 20140811172607-1 x86_64 14277&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** ./data/loop-server/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-server-stage (or similar name)&lt;br /&gt;
** ELB: loop-server-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-server-stage&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Running SciLinux 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/loop-server&lt;br /&gt;
*** especially /data/loop-server/config/settings.json&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
** /etc/circus.d&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/puppet/*&lt;br /&gt;
*** especially /etc/puppet/yaml/app&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
*** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
** /var/log/*&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** node loop/index.js&lt;br /&gt;
** stackdriver&lt;br /&gt;
** circusd&lt;br /&gt;
** heka.d&lt;br /&gt;
** nginx&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/loop.stdout.log&lt;br /&gt;
** /var/log/hekad/loop.stderr.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.err.log&lt;br /&gt;
** /media/ephemeral0/circus/loop_server/loop_server.eout.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/loop_server.error.log&lt;br /&gt;
&lt;br /&gt;
* Setting Stage configuration:&lt;br /&gt;
** Toggling the config setting to use either a mock server or a third-party server&lt;br /&gt;
** File: /data/loop-server/config/settings.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 curl https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://loop.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 In the browser: https://loop.stage.mozaws.net/&lt;br /&gt;
&lt;br /&gt;
== Loop Client and Server Configurations ==&lt;br /&gt;
* Live Server vs. Mock Server&lt;br /&gt;
** By default, the Loop-Server in Stage is configured to talk to our mock server:&lt;br /&gt;
*** https://loop-delayed-response.stage.mozaws.net/&lt;br /&gt;
** Default load testing will hit the mock server.&lt;br /&gt;
** To hit the partner test servers, the following configuration file will need to be updated by OPs:&lt;br /&gt;
*** /data/loop-server/config/settings.json&lt;br /&gt;
** Talk to OPs to toggle that configuration file and restart the Loop-Server in Stage.&lt;br /&gt;
** REFs:&lt;br /&gt;
*** https://wiki.mozilla.org/QA/Services/LoopTestEnvironments#Loop_Mock_Server_Stage_Details&lt;br /&gt;
&lt;br /&gt;
* Yaml Files&lt;br /&gt;
** /etc/puppet/yaml/app&lt;br /&gt;
*** loop_client.dev.yaml&lt;br /&gt;
*** loop_client.prod.yaml&lt;br /&gt;
*** loop_client.stage.yaml&lt;br /&gt;
*** loop_client.yaml&lt;br /&gt;
*** loop_server.dev.yaml&lt;br /&gt;
*** loop_server.prod.yaml&lt;br /&gt;
*** loop_server.stage.yaml&lt;br /&gt;
*** loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
== Loop Client Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** Loop-Client: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep loop&lt;br /&gt;
&lt;br /&gt;
* VERSION.txt&lt;br /&gt;
** /data/loop-client/content/VERSION.txt&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: look for loop-client-*&lt;br /&gt;
** ELB: loop-client-st-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: look for &amp;quot;loop-client app server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/loop-client&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
** /etc/puppet/yaml/app/loop_client.dev.yaml&lt;br /&gt;
** /etc/puppet/yaml/app/loop_client.prod.yaml&lt;br /&gt;
** /etc/puppet/yaml/app/loop_client.stage.yaml&lt;br /&gt;
** /etc/puppet/yaml/app/loop_client.yaml&lt;br /&gt;
** /etc/puppet/yaml/app/loop_server.dev.yaml&lt;br /&gt;
** /etc/puppet/yaml/app/loop_server.prod.yaml&lt;br /&gt;
** /etc/puppet/yaml/app/loop_server.stage.yaml&lt;br /&gt;
** /etc/puppet/yaml/app/loop_server.yaml&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** look for stackdriver, nginx, python, circus, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad&lt;br /&gt;
** /media/ephemeral0/nginx/logs&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /etc/heka.d&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
 Check the version: https://call.stage.mozaws.net/VERSION.txt &lt;br /&gt;
 &lt;br /&gt;
 curl https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://call.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Check that Loop-Client Stage is talking to Loop-Server Stage&lt;br /&gt;
 In the browser: https://call.stage.mozaws.net/config.js&lt;br /&gt;
 should return something similar to this&lt;br /&gt;
 var loop = loop || {};&lt;br /&gt;
 loop.config = {serverUrl: &#039;https://https://loop.stage.mozaws.net&#039;};&lt;br /&gt;
&lt;br /&gt;
== Loop Mock Server Stage Details ==&lt;br /&gt;
** NOTE: This server is used for load testing whenever we do not want to hit the third-party servers. A configuration change must be made in the Loop Server in order to make this work.&lt;br /&gt;
&lt;br /&gt;
* URL&lt;br /&gt;
** Mock: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF stack: loop-delayed-response (or similar)&lt;br /&gt;
** ELB: loop-delayed-r-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** R53AliasRecord: loop-delayed-response.stage.mozaws.net&lt;br /&gt;
** Instances: 1 m1.small, search for &amp;quot;delayed HTTP server&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /data/delayed&lt;br /&gt;
** /data/delayed/delayed-master&lt;br /&gt;
** /etc/circus.d/&lt;br /&gt;
** /etc/circus.d/loopserver.ini&lt;br /&gt;
** /etc/circus.d/hekad-loop.ini&lt;br /&gt;
** /etc/circus.ini&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root	/usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/&lt;br /&gt;
** nobody	node index.js&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://loop-delayed-response.stage.mozaws.net&lt;br /&gt;
 ok&lt;br /&gt;
&lt;br /&gt;
* Access&lt;br /&gt;
** Log in as &amp;quot;ec2-user&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== MSISDN Gateway Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** MSISDN Gateway: https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa&lt;br /&gt;
** Current:&lt;br /&gt;
*** msisdn-gateway-svcops 0.4.2-0snap201408110138git80ea3b x86_64 52573829&lt;br /&gt;
*** puppet-config-msisdn 20140811185304-1 x86_64 12723&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: msisdn-gateway-stage (or similar)&lt;br /&gt;
** ELB: msisdn-gateway-ELB-&amp;lt;SOME VALUE&amp;gt;&lt;br /&gt;
** Currently one m3.medium instance&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.4 (Carbon)&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/aws&lt;br /&gt;
** /opt/ec2&lt;br /&gt;
** /opt/openresty&lt;br /&gt;
** /opt/rh&lt;br /&gt;
** /opt/stackdriver&lt;br /&gt;
** /data/hekad&lt;br /&gt;
** /data/msisdn-gateway&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for stackdriver, python, circus, resty, nginx, node, heka&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_err.log&lt;br /&gt;
** /media/ephemeral0/msisdn-gateway/msisdn-gateway_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsdefault.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logsmsisdn-gateway.error.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stderr.log&lt;br /&gt;
** /var/log/hekad/msisdn_gateway.stdout.log&lt;br /&gt;
&lt;br /&gt;
* Configuration File&lt;br /&gt;
** /data/msisdn-gateway/config/production.json&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser: https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 returns {&amp;quot;storage&amp;quot;:true}&lt;br /&gt;
 &lt;br /&gt;
 curl https://msisdn.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 curl -I https://msisdn.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== MSISDN Mock Server Stage Details ==&lt;br /&gt;
* URL: http://omxen.dev.mozaws.net&lt;br /&gt;
* Endpoint: http://omxen.dev.mozaws.net/send&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** This is one m3.medium&lt;br /&gt;
** Look for omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
*Access: SSH&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Amazon Linux AMI release 2014.03&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** Look for nginx, python, omxen&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /home/ec2-user/omxen&lt;br /&gt;
** /opt/aws&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log/nginx&lt;br /&gt;
** Use: sudo cat nginx/*.log, etc&lt;br /&gt;
&lt;br /&gt;
* Restarting&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 In the browser, http://omxen.dev.mozaws.net/&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl omxen.dev.mozaws.net&lt;br /&gt;
 OMXEN SMS GATEWAY&lt;br /&gt;
 &lt;br /&gt;
 curl -I omxen.dev.mozaws.net&lt;br /&gt;
&lt;br /&gt;
== Sentry Server Stage Details ==&lt;br /&gt;
* URL&lt;br /&gt;
** https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Versions&lt;br /&gt;
** rpm -qa | grep sentry&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** Scientific Linux release 6.3&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** /opt/sentry&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** root     /usr/bin/python /usr/bin/circusd --log-output /var/log/circus.log --pidfile /var/run/                                                         &lt;br /&gt;
** apache     /opt/sentry/bin/python /opt/sentry/bin/sentry --config=/etc/sentry.d/sentry.shared.us-east-1.stage.mozaws.net.py start ud&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** /var/log&lt;br /&gt;
** nothing in /media/ephemeral0&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
** For now, just verify the service is running on the host: ps aux | grep sentry&lt;br /&gt;
&lt;br /&gt;
== QA Access via a Bastion Host ==&lt;br /&gt;
* SSH with AWS keys to the Stage bastion host in US East 1. From there SSH directly into any instance using your LDAP name. For the mock server, log in as &amp;quot;ec2-user&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Stage Environment ==&lt;br /&gt;
* Sentry: https://sentry.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
** Getting access to Sentry Stage - talk to the OPs team&lt;br /&gt;
&lt;br /&gt;
* Stackdriver&lt;br /&gt;
** https://app.stackdriver.com/&lt;br /&gt;
** None at this time. See https://bugzilla.mozilla.org/show_bug.cgi?id=1063134&lt;br /&gt;
&lt;br /&gt;
* Graphite&lt;br /&gt;
** https://graphite.shared.us-east-1.stage.mozaws.net&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-activated-users&lt;br /&gt;
*** Graphite &amp;gt; stats &amp;gt; loop-call-urls&lt;br /&gt;
*** User Graphs &amp;gt; not currently defined&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/#/dashboard/file/landing.json&lt;br /&gt;
** https://kibana.shared.us-east-1.stage.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** HTTP Request Times - TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
* https://heka.shared.us-east-1.stage.mozaws.net/&lt;br /&gt;
* (or https://heka.shared.us-east-1.stage.mozaws.net/#health)&lt;br /&gt;
** PlugIns - Filters&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopBasicMetrics&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailyCallers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopTotalUsers&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopUrls&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/filters/LoopActiveDailySubscribers&lt;br /&gt;
** PlugIns - Outputs&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopNginxErrorFileOutput&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/outputs/LoopServerFileOutput&lt;br /&gt;
** PlugIns - Encoders&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopNginxErrorFileOutput-ProtobufEncoder&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#plugins/encoders/LoopServerFileOutput-ProtobufEncoder&lt;br /&gt;
** Sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_total_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_cumulative_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_daily_unique_subscribers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_new_callers.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_weekly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_fortnightly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_monthly_recurring.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_clicked.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopBasicMetrics/outputs/LoopBasicMetrics.loop_urls_generated.json&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopHTTPStatus/outputs/LoopHTTPStatus.HTTPStatus.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailyCallers/outputs/LoopActiveDailyCallers.EstimatedActiveDailyFxOSCallers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopTotalUsers/outputs/LoopTotalUsers.EstimatedTotalFxOSUsers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailySubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopActiveDailySubscribers/outputs/LoopActiveDailySubscribers.EstimatedActiveDailyFxOSSubscribers.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.All.cbuf&lt;br /&gt;
*** https://heka.shared.us-east-1.stage.mozaws.net/#sandboxes/LoopUrls/outputs/LoopUrls.FirefoxOS.cbuf&lt;br /&gt;
&lt;br /&gt;
== Monitoring the Production Environment ==&lt;br /&gt;
* Sentry: http://sentry.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** Getting access to Sentry Prod - talk to the OPs team&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/&lt;br /&gt;
** http://sentry.shared.us-west-2.prod.mozaws.net/loop-prod/loop/&lt;br /&gt;
&lt;br /&gt;
* Kibana: &lt;br /&gt;
** Main: https://kibana.shared.us-west-2.prod.mozaws.net&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/index.html#/dashboard/file/loop_http_status.json&lt;br /&gt;
** https://kibana.shared.us-west-2.prod.mozaws.net/#/dashboard/temp/QeeHeG7MQoGv4HdKzANCEw&lt;br /&gt;
&lt;br /&gt;
* Heka:&lt;br /&gt;
** Main: https://heka.shared.us-west-2.prod.mozaws.net/#&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopActiveDailyUsers&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/LoopHTTPStatus&lt;br /&gt;
** https://heka.shared.us-west-2.prod.mozaws.net/#plugins/filters/MsisdnGatewayHTTPStatus&lt;br /&gt;
&lt;br /&gt;
* Loop-Server Dashboard&lt;br /&gt;
** https://metrics.fxa.us-west-2.prod.mozaws.net/loop-server-dashboard&lt;br /&gt;
&lt;br /&gt;
* Graphite: https://graphite.shared.us-west-2.prod.mozaws.net (statsd data)&lt;br /&gt;
&lt;br /&gt;
* Firefox Input Dashboard: https://input.mozilla.org/en-US/?product=Loop&lt;br /&gt;
&lt;br /&gt;
* Pingdom:&lt;br /&gt;
** Loop-Client: http://stats.pingdom.com/20dar76w4hmv/1304575&lt;br /&gt;
** Loop-Server: http://stats.pingdom.com/20dar76w4hmv/1304565&lt;br /&gt;
&lt;br /&gt;
== Loads V1 Services Cluster Environment ==&lt;br /&gt;
* For details on the Loads V1 cluster, see the following link:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
&lt;br /&gt;
== Dev Environment ==&lt;br /&gt;
* URLs&lt;br /&gt;
** Server: https://loop-dev.stage.mozaws.net/&lt;br /&gt;
** Client: http://loop-webapp.dev.mozaws.net/&lt;br /&gt;
** Server: https://msisdn-dev.stage.mozaws.net/&lt;br /&gt;
* Versions&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* AWS&lt;br /&gt;
** CF Stack: ulfr-devstack-loop&lt;br /&gt;
** ELB: ulfr-devstack-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;loop app server (ulfr-devstack-loop)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
** CF Stack: bwong-msisdn-dev&lt;br /&gt;
** ELB: bwong-msisdn-d-ELB-&amp;lt;some value&amp;gt;&lt;br /&gt;
** One instance: search for &amp;quot;msisdn_gateway server (bwong-msisdn-dev)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* OS&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Files&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Processes&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Logs&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Heka&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
* Quick Verifications&lt;br /&gt;
 http://loop.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-loop-server&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla Loop (WebRTC App) server&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.7.0&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/loop-server/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;http://loop.dev.mozaws.net&amp;quot;,&lt;br /&gt;
  &amp;quot;fakeTokBox&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://loop.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
  {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true,&lt;br /&gt;
  &amp;quot;provider&amp;quot;: false&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 http://loop-webapp.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
     Loop&lt;br /&gt;
     Welcome to the Loop web client.&lt;br /&gt;
 &lt;br /&gt;
 http://loop-webapp.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns 404&lt;br /&gt;
&lt;br /&gt;
 http://msisdn.dev.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn.dev.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 http://msisdn.dev.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;mozilla-msisdn-gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;The Mozilla MSISDN Gateway&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;0.3.0-DEV&amp;quot;,&lt;br /&gt;
  &amp;quot;homepage&amp;quot;: &amp;quot;https://github.com/mozilla-services/msisdn-gateway/&amp;quot;,&lt;br /&gt;
  &amp;quot;endpoint&amp;quot;: &amp;quot;https://msisdn-dev.stage.mozaws.net&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
 &lt;br /&gt;
 https://msisdn-dev.stage.mozaws.net/__heartbeat__&lt;br /&gt;
 Returns&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;storage&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
 or similar&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Main Sites&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop&lt;br /&gt;
** https://wiki.mozilla.org/CloudServices/Loop/Server&lt;br /&gt;
** https://wiki.mozilla.org/Services/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/ID&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Telemetry&lt;br /&gt;
** Loop MVP Features: https://docs.google.com/a/mozilla.com/spreadsheet/ccc?key=0AlJmiyFngeSwdGJEVnItQ2NVbGx6NXdjbVBUYmIxSGc#gid=0&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-docs/&lt;br /&gt;
** https://people.mozilla.org/~dhenein/labs/loop-mvp-spec/&lt;br /&gt;
** https://wiki.mozilla.org/Loop/Architecture/MVP&lt;br /&gt;
&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com/loop/index.html&lt;br /&gt;
** https://docs.services.mozilla.com/loop/apis.html&lt;br /&gt;
&lt;br /&gt;
* GitHub Repos&lt;br /&gt;
** https://github.com/orgs/mozilla-services/teams/loop&lt;br /&gt;
** https://github.com/mozilla-services/loop-server&lt;br /&gt;
** https://github.com/mozilla/loop-client&lt;br /&gt;
** https://github.com/mozilla/loop-client/releases&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway&lt;br /&gt;
** https://github.com/mozilla-services/msisdn-gateway/blob/master/API.md&lt;br /&gt;
** https://github.com/mozilla/videur&lt;br /&gt;
** https://github.com/mozilla/fxa-auth-server/wiki/API-extensions-for-supporting-MSISDN-verification-in-FxA-auth-server&lt;br /&gt;
** https://github.com/mozilla/gecko-projects/tree/elm/browser/components/loop/standalone&lt;br /&gt;
** https://github.com/mozilla-services/svcops&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config&lt;br /&gt;
&lt;br /&gt;
* Bugzilla&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Loop&amp;amp;component=Server&lt;br /&gt;
*** Other Products&lt;br /&gt;
*** Product: Loop&lt;br /&gt;
*** Component: General/Client/Server&lt;br /&gt;
&lt;br /&gt;
** https://bugzilla.mozilla.org/enter_bug.cgi?product=Mozilla%20Services@component=MobileID&lt;br /&gt;
*** Client Software&lt;br /&gt;
*** Product: Mozilla Services&lt;br /&gt;
*** Component: MobileID&lt;br /&gt;
&lt;br /&gt;
== OPs Mana and GitHub Pages ==&lt;br /&gt;
* NOTE: Talk to OPs for the links to Mana.&lt;br /&gt;
* Puppet Config: https://github.com/mozilla-services/puppet-config&lt;br /&gt;
* Cloud Formation: https://github.com/mozilla-services/svcops&lt;br /&gt;
* Loop-specific: TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TokenServerAndSyncLoadTesting&amp;diff=1015672</id>
		<title>TestEngineering/Services/TokenServerAndSyncLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TokenServerAndSyncLoadTesting&amp;diff=1015672"/>
		<updated>2014-09-17T00:41:59Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Known Bugs, Issues, and Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* NOTE: We currently have two Verifier stacks in Stage (and probably Production):&lt;br /&gt;
** The standalone Browser_ID Verifier stack: See that Verifier sections below...&lt;br /&gt;
** A Tokenserver+Verifier stack: See the TokenServer sections below...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary for Tokenserver, Verifier, and Sync 1.5 ==&lt;br /&gt;
* Latest Results&lt;br /&gt;
** Link to loads cluster: https://loads.services.mozilla.com/&lt;br /&gt;
*** Note: this now requires login privileges and a password&lt;br /&gt;
** Snapshots from StackDriver - TBD&lt;br /&gt;
** Snapshots from Kibana - TBD&lt;br /&gt;
* Latest Deployments&lt;br /&gt;
** TokenServer Stage: https://bugzilla.mozilla.org/show_bug.cgi?id=1014496&lt;br /&gt;
** TokenServer Prod: https://bugzilla.mozilla.org/show_bug.cgi?id=1027899&lt;br /&gt;
** Sync Server Stage: https://bugzilla.mozilla.org/show_bug.cgi?id=1026346&lt;br /&gt;
** Sync Server Prod: https://bugzilla.mozilla.org/show_bug.cgi?id=1026346&lt;br /&gt;
** Verifier Stage Deploy: ttps://bugzilla.mozilla.org/show_bug.cgi?id=1026644&lt;br /&gt;
** Verifier Prod Deploy: https://bugzilla.mozilla.org/show_bug.cgi?id=1027392&lt;br /&gt;
* In Progress&lt;br /&gt;
** Build out of Kibana dashboards&lt;br /&gt;
** Ongoing testing of Tokenserver, Verifier, and Sync releases&lt;br /&gt;
** Bug review and issue debug - there are a lot of issues to work on (see the long list near the bottom of the wiki)&lt;br /&gt;
* Bugs To Verify:&lt;br /&gt;
** Tokenserver: https://bugzilla.mozilla.org/show_bug.cgi?id=988095&lt;br /&gt;
** Tokenserver: https://bugzilla.mozilla.org/show_bug.cgi?id=1025767&lt;br /&gt;
** Tokenserver: https://bugzilla.mozilla.org/show_bug.cgi?id=1027444&lt;br /&gt;
** Sync: https://bugzilla.mozilla.org/show_bug.cgi?id=1025735&lt;br /&gt;
** Sync: https://bugzilla.mozilla.org/show_bug.cgi?id=735102&lt;br /&gt;
** Sync: https://bugzilla.mozilla.org/show_bug.cgi?id=775395&lt;br /&gt;
* Planned&lt;br /&gt;
** Scaling for production traffic after release of Fx29&lt;br /&gt;
** Sync 1.5 migration work&lt;br /&gt;
** Operations readiness testing: See Bug 1006792&lt;br /&gt;
* Blockers&lt;br /&gt;
** none at this time&lt;br /&gt;
* Completed&lt;br /&gt;
** Pre-release load testing&lt;br /&gt;
** Previous load test results (short): http://loads.services.mozilla.com/&lt;br /&gt;
* Performance&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
&lt;br /&gt;
* TokenServer+Verifier Stage environment:&lt;br /&gt;
 From the browser: https://token.stage.mozaws.net&lt;br /&gt;
 curl https://token.stage.mozaws.net&lt;br /&gt;
 curl -I https://token.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of tokenserver on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Alternate method:&lt;br /&gt;
 Use the test tool from here: https://github.com/edmoz/fxa-sync-client&lt;br /&gt;
 Install and check all collection types for a known account in Stage:&lt;br /&gt;
 bin/sync-cli.js -e EMAIL -p PASSWORD --env stage -t COLLECTION&lt;br /&gt;
     where -t is one of bookmarks,history,passwords,tabs,addons,prefs,forms&lt;br /&gt;
&lt;br /&gt;
* Verifier Stage environment:&lt;br /&gt;
 In the browser: https://verifier.stage.mozaws.net/&lt;br /&gt;
 curl https://verifier.stage.mozaws.net&lt;br /&gt;
 curl -I https://verifier.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of browserid-verifier on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Sync Server Stage environment:&lt;br /&gt;
 Install server-syncstorage to the local host or AWS instance (see below)&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 Quick test against the TokenServer&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py --use-token-server &amp;lt;Stage TokenServer&amp;gt;&lt;br /&gt;
 Current example:&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py --use-token-server &lt;br /&gt;
     https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
 Quick tests against the Sync nodes&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &amp;lt;Stage Sync Node&amp;gt;#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 Current examples:&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 Get the Node Secret information from OPs&lt;br /&gt;
&lt;br /&gt;
* Using TPS&lt;br /&gt;
** The TPS FxA/Sync automated tests can be used as well, but the following file will have to be edited to add Stage environment configuration parameters: https://github.com/mozilla/gecko-dev/blob/master/testing/tps/tps/testrunner.py&lt;br /&gt;
** See the following wiki page for more information: https://wiki.mozilla.org/User_Services/Sync/Run_TPS&lt;br /&gt;
** See also: https://bugzilla.mozilla.org/show_bug.cgi?id=1006675&lt;br /&gt;
&lt;br /&gt;
== Quick Verification Of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment after a new deployment.&lt;br /&gt;
&lt;br /&gt;
* Tokenserver+Verifier Production Environment&lt;br /&gt;
 In the browser: https://token.services.mozilla.com&lt;br /&gt;
 curl https://token.services.mozilla.com&lt;br /&gt;
 curl -I https://token.services.mozilla.com&lt;br /&gt;
 Then:&lt;br /&gt;
 Use the test tool from here: https://github.com/edmoz/fxa-sync-client&lt;br /&gt;
 Install and check all collection types for a known account in Production:&lt;br /&gt;
 bin/sync-cli.js -e PROD-EMAIL -p PASSWORD -t COLLECTION&lt;br /&gt;
     where -t is one of bookmarks,history,passwords,tabs,addons,prefs,forms&lt;br /&gt;
&lt;br /&gt;
* Verifier Production Environment&lt;br /&gt;
 In the browser: https://verifier.accounts.firefox.com&lt;br /&gt;
 curl https://verifier.accounts.firefox.com&lt;br /&gt;
 curl -I https://verifier.accounts.firefox.com&lt;br /&gt;
 Then:&lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of browserid-verifier on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* Sync Server Stage environment&lt;br /&gt;
 Sign in with a known FxA account and sync data with a current Production account (sync node).&lt;br /&gt;
 Create a new FxA account and set up sync.&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#Loads_Services_Cluster_Environment&lt;br /&gt;
&lt;br /&gt;
== Installing BrowserID-Verifier and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 $ git clone git://github.com/mozilla/browserid-verifier&lt;br /&gt;
 $ cd browserid-verifier&lt;br /&gt;
 $ npm install&lt;br /&gt;
 $ npm test&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
      Note: This should hit Stage by default: SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the verifier.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Verifier in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://verifier.stage.mozaws.net	&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: The Stage Verifier hits the Stage mockmyid server&lt;br /&gt;
&lt;br /&gt;
* Production environment: &lt;br /&gt;
 $ make test SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
 $ make bench SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Verifier ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=TBD&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing TokenServer+Verifier and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/tokenserver&lt;br /&gt;
 $ cd tokenserver&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ make test&lt;br /&gt;
     Note: This is for local testing only&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
     Note: This should hit Prod by default: SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with TokenServer+Verifier.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against TokenServer+Verifier in Stage ==&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://token.stage.mozaws.net		&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: This also hits the Stage Verifier, which in turns hits the Stage mockmyid server&lt;br /&gt;
&lt;br /&gt;
* And while we are at it...&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 $ make bench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 $ make bench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for TokenServer+Verifier ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/tokenserver/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing Sync 1.5 and the Loads tool on Localhost or AWS ==&lt;br /&gt;
 Installation:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/server-syncstorage/&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ make test&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with Sync 1.5.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against Sync 1.5 in Stage ==&lt;br /&gt;
* Loads against specific Sync nodes in Stage&lt;br /&gt;
 $ make test SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
 $ make bench SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
 Sync Stage nodes:&lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net&lt;br /&gt;
     https://sync-2-us-east-1.stage.mozaws.net&lt;br /&gt;
     https://sync-3-us-east-1.stage.mozaws.net&lt;br /&gt;
     ...etc...&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 &lt;br /&gt;
 NOTE: The OPs team has the SECRET string for Stage. Get it from them before you start testing.&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for Sync 1.5 in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Running a combined load test against TokenServer+Verifier and Sync 1.5 in Stage ==&lt;br /&gt;
* A combined loads test against TokenServer and Sync 1.5 in Stage&lt;br /&gt;
* This is done via the server-syncstorage directory that was cloned and built above&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make test SERVER_URL=https://your.tokenserver.here&lt;br /&gt;
 $ make bench SERVER_URL=https://your.tokenserver.here&lt;br /&gt;
 &lt;br /&gt;
 Examples for Stage:&lt;br /&gt;
 $ make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 See https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#TokenServer.2BVerifier_Stage_Environment&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: The Stage Tokenserver hits the Stage Verifier, which, in turn, hits the mockmyid server.&lt;br /&gt;
&lt;br /&gt;
* And while we are at it...&lt;br /&gt;
 Dev environment:&lt;br /&gt;
 Examples:&lt;br /&gt;
 $ make test SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 $ make bench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 &lt;br /&gt;
 Prod environment:&lt;br /&gt;
 Examples:&lt;br /&gt;
 $ make test SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 $ make bench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 See https://wiki.mozilla.org/QA/Services/FxATestEnvironments#FxA.2C_TokenServer.2C_and_Sync_Production_Environments&lt;br /&gt;
 and https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#TokenServer_and_Sync_1.5_Dev_Environments&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for a combined load test in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Prod environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (BrowserID-Verifier, TokenServer, Sync, Combined):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
&lt;br /&gt;
** For make bench (BrowserID-Verifier, TokenServer, Sync, Combined):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
&lt;br /&gt;
** For make megabench (using the LoadsCluster with BrowserID-Verifier, TokenSerer, Sync, Combined):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel) &lt;br /&gt;
*** SSH (the user account needed to SSH into the loads cluster - the default is ubuntu)&lt;br /&gt;
&lt;br /&gt;
* Tokenserver load test code&lt;br /&gt;
** The Tokenserver load test can be configured - see the following lines:&lt;br /&gt;
** Basic Settings: https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** MockMyID: https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L19-L36&lt;br /&gt;
** Percentages: https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L39-L51&lt;br /&gt;
&lt;br /&gt;
* Verifier load test code&lt;br /&gt;
** The Verifier load test can be configured - see the following lines:&lt;br /&gt;
** Various settings: https://github.com/mozilla/browserid-verifier/blob/master/loadtest/loadtest.py#L13-L53&lt;br /&gt;
&lt;br /&gt;
* Sync Server load test code&lt;br /&gt;
** The Sync Server load test can be configured - see the following lines:&lt;br /&gt;
** Setting MockMyID: https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py#L26-L45&lt;br /&gt;
** Setting test distributions: https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py#L48-L83&lt;br /&gt;
&lt;br /&gt;
* REFs: &lt;br /&gt;
** https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/blob/master/loadtest/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* TokenServer&lt;br /&gt;
** File location: tokenserver/loadtest/loadtest.py&lt;br /&gt;
** Inside NoteAssignmentTest, test_realistic is the main load test; the others are for specific behaviors&lt;br /&gt;
** The test runs as following:&lt;br /&gt;
 95% ask for assertions on existing users (on a DB filled by test_single_token_exchange)&lt;br /&gt;
 4% ask for assertion on a new use&lt;br /&gt;
 1% ask for a bad assertion&lt;br /&gt;
** A bug has been filed to get the following additional coverage for the load test:&lt;br /&gt;
*** generation numbers in assertion&lt;br /&gt;
*** client state string&lt;br /&gt;
** A bug has been filed to get some integration tests written:&lt;br /&gt;
*** to cover the edge/error cases not in the load test&lt;br /&gt;
*** to be pointed at a remote server&lt;br /&gt;
&lt;br /&gt;
* Sync&lt;br /&gt;
** File location: server-syncstorage/loadtest/stress.py&lt;br /&gt;
** This is the Sync 2.0 load test that has been back-ported for Sync 1.5.&lt;br /&gt;
** The stress.py file is fully configurable for the following:&lt;br /&gt;
*** client probability&lt;br /&gt;
*** client distribution&lt;br /&gt;
*** collections&lt;br /&gt;
** A bug has been filed to add support for load testing tabs&lt;br /&gt;
*** The tab collection it uses memcache; we need to figure out a way to test it without overloading the server&lt;br /&gt;
** There are currently no constants to define how to select percentages per collection type&lt;br /&gt;
** Right now, we need to manually configure the collections list in stress.py:&lt;br /&gt;
*** collections = [&#039;bookmarks&#039;, &#039;forms&#039;, &#039;passwords&#039;, &#039;history&#039;, &#039;prefs&#039;]&lt;br /&gt;
*** Basically, you can add more entries of each type, since the load test (per user/again/hit/pass) picks randomly from the list for any given request...&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Tokenserver Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* Verifier Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* Sync Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for TokenServer (per server)&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.log.*&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.error.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stdout.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stderr.log&lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for Verifier (per server)&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/squid/access.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stderr.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stdout.log &lt;br /&gt;
&lt;br /&gt;
* 3. Important error logs for Sync (per Sync node)&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/nginx/access.log&lt;br /&gt;
** /media/ephemeral0/error.log&lt;br /&gt;
** /media/ephemeral0/sync/sync.err&lt;br /&gt;
** /media/ephemeral0/sync/sync.log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Acceptable TokenServer errors:&lt;br /&gt;
 1% - 2% failures (as the following)&lt;br /&gt;
 token.log:&lt;br /&gt;
 &amp;quot;name&amp;quot;: &amp;quot;token.assertion.invalid_signature_error&amp;quot;&lt;br /&gt;
 &amp;quot;name&amp;quot;: &amp;quot;token.assertion.verify_failure&amp;quot;&lt;br /&gt;
 nginx access.log:&lt;br /&gt;
 401s&lt;br /&gt;
 NOTE: Values can be tweaked here:&lt;br /&gt;
     https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L58-L60&lt;br /&gt;
 &lt;br /&gt;
 The following types of errors are known:&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
     Exception KeyError: KeyError(49564400,) in &amp;lt;module &#039;threading&#039;...&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.log&lt;br /&gt;
     ...&amp;quot;Starting new HTTP connection (9): 127.0.0.1&amp;quot;, &amp;quot;hostname&amp;quot;: ...&lt;br /&gt;
     {&amp;quot;error&amp;quot;: &amp;quot;StopIteration()&amp;quot;, &amp;quot;traceback&amp;quot;: &amp;quot;Uncaught exception:\n  &lt;br /&gt;
     File \&amp;quot;/data/tokenserver/local/lib/python2.6/site-packages/gunicorn/workers/async.py\&amp;quot;...&lt;br /&gt;
     ...&amp;quot;Connection pool is full, discarding connection: 127.0.0.1&amp;quot;, &amp;quot;...&lt;br /&gt;
 REF:&lt;br /&gt;
 https://bugzilla.mozilla.org/show_bug.cgi?id=1040396&lt;br /&gt;
 https://bugzilla.mozilla.org/show_bug.cgi?id=1040397&lt;br /&gt;
 &lt;br /&gt;
 OLD: Also, it may be the case that the following errors are &amp;quot;acceptable&amp;quot; if TS Stage is larger than Verifier Stage:&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
 Verifier-related errors of these types:&lt;br /&gt;
 &amp;quot;HttpConnectionPool is full, discarding connection: verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
 &amp;quot;Resetting dropped connection: verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
 &amp;quot;Starting new HTTPS connection (179): verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Acceptable Verifier errors:&lt;br /&gt;
 The verifier_out.log will show errors of the following types:&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;untrusted issuer...&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;expired&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;algorithms do not match&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;audience mismatch: scheme mismatch&#039;&lt;br /&gt;
&lt;br /&gt;
* Acceptable Sync node errors:&lt;br /&gt;
 In the nginx access.log files:&lt;br /&gt;
 We will see some percentage of 404s. Right now we see the following:&lt;br /&gt;
     14% 404s (compared to the total count of 200s)&lt;br /&gt;
     with the config set up as follows:&lt;br /&gt;
          users = 20&lt;br /&gt;
          duration = 1800&lt;br /&gt;
          agents = 5&lt;br /&gt;
 Ideally, the overall percentage of 404s should drop the longer the load test.&lt;br /&gt;
 Usually, you will not see 304s, 400s, 412s, or 415s for a load test,&lt;br /&gt;
 although they may show up in the logs after running the remote integration tests.&lt;br /&gt;
 &lt;br /&gt;
 In /var/log/hekad/sync_1_5.stderr.log&lt;br /&gt;
 You may see some Decoder &#039;Sync-1_5-SlowQuery-MySqlSlowQueryDecoder&#039; error: Failed parsing&lt;br /&gt;
 and a lot of BSO INSERTs&lt;br /&gt;
 &lt;br /&gt;
 In /media/ephemeral0/logs/sync/sync.err&lt;br /&gt;
 You should see expected skew and QueuePool messages and Deprecation warnings&lt;br /&gt;
 Also, these are known&lt;br /&gt;
 Exception SystemExit&lt;br /&gt;
 Exception KeyError&lt;br /&gt;
 This is probably https://bugzilla.mozilla.org/show_bug.cgi?id=1040397&lt;br /&gt;
&lt;br /&gt;
== Monitoring TS and Sync Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard:&lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Tokenserver: &lt;br /&gt;
** Repo: https://github.com/mozilla-services/tokenserver/issues &lt;br /&gt;
** Bugzilla: http://mzl.la/1s4qZKn&lt;br /&gt;
&lt;br /&gt;
* BrowserID-Verifier:&lt;br /&gt;
** Repo: https://github.com/mozilla/browserid-verifier/issues&lt;br /&gt;
** Bugzilla: no specific cateogory&lt;br /&gt;
&lt;br /&gt;
* Sync:&lt;br /&gt;
** Repo: https://github.com/mozilla-services/server-syncstorage/issues&lt;br /&gt;
** Bugzilla: http://mzl.la/VUrYQ5&lt;br /&gt;
&lt;br /&gt;
* OPs and Infrastructure&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Other URLs&lt;br /&gt;
** http://restmail.net&lt;br /&gt;
** https://mockmyid.com&lt;br /&gt;
* Repositories&lt;br /&gt;
** https://github.com/mozilla-services/tokenserver&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier&lt;br /&gt;
** https://github.com/mozilla/browserid-local-verify&lt;br /&gt;
** https://github.com/callahad/mockmyid&lt;br /&gt;
** https://github.com/mozilla/restmail.net&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com&lt;br /&gt;
** https://docs.services.mozilla.com/token/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Sagrada/TokenServer&lt;br /&gt;
** https://docs.services.mozilla.com/sync/&lt;br /&gt;
* The QA Test Environments: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
* Deploying the FxA Load Test environment for broker/agents usage:&lt;br /&gt;
** https://github.com/mozilla/fxa-deployment&lt;br /&gt;
* Sync 1.5 protocol, documentation, etc.&lt;br /&gt;
** https://github.com/mozilla-services/docs&lt;br /&gt;
** https://docs.services.mozilla.com/#how-to&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-fxa.html&lt;br /&gt;
** https://docs.services.mozilla.com/token/apis.html&lt;br /&gt;
** https://docs.services.mozilla.com/storage/apis-1.5.html&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-sync-1.5.html&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-sync-1.5.html&lt;br /&gt;
** https://github.com/mozilla-services/syncserver&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TokenServerAndSyncLoadTesting&amp;diff=1015671</id>
		<title>TestEngineering/Services/TokenServerAndSyncLoadTesting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=TestEngineering/Services/TokenServerAndSyncLoadTesting&amp;diff=1015671"/>
		<updated>2014-09-17T00:40:48Z</updated>

		<summary type="html">&lt;p&gt;Jbonacci: /* Monitoring TS and Sync Stage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* NOTE: We currently have two Verifier stacks in Stage (and probably Production):&lt;br /&gt;
** The standalone Browser_ID Verifier stack: See that Verifier sections below...&lt;br /&gt;
** A Tokenserver+Verifier stack: See the TokenServer sections below...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary for Tokenserver, Verifier, and Sync 1.5 ==&lt;br /&gt;
* Latest Results&lt;br /&gt;
** Link to loads cluster: https://loads.services.mozilla.com/&lt;br /&gt;
*** Note: this now requires login privileges and a password&lt;br /&gt;
** Snapshots from StackDriver - TBD&lt;br /&gt;
** Snapshots from Kibana - TBD&lt;br /&gt;
* Latest Deployments&lt;br /&gt;
** TokenServer Stage: https://bugzilla.mozilla.org/show_bug.cgi?id=1014496&lt;br /&gt;
** TokenServer Prod: https://bugzilla.mozilla.org/show_bug.cgi?id=1027899&lt;br /&gt;
** Sync Server Stage: https://bugzilla.mozilla.org/show_bug.cgi?id=1026346&lt;br /&gt;
** Sync Server Prod: https://bugzilla.mozilla.org/show_bug.cgi?id=1026346&lt;br /&gt;
** Verifier Stage Deploy: ttps://bugzilla.mozilla.org/show_bug.cgi?id=1026644&lt;br /&gt;
** Verifier Prod Deploy: https://bugzilla.mozilla.org/show_bug.cgi?id=1027392&lt;br /&gt;
* In Progress&lt;br /&gt;
** Build out of Kibana dashboards&lt;br /&gt;
** Ongoing testing of Tokenserver, Verifier, and Sync releases&lt;br /&gt;
** Bug review and issue debug - there are a lot of issues to work on (see the long list near the bottom of the wiki)&lt;br /&gt;
* Bugs To Verify:&lt;br /&gt;
** Tokenserver: https://bugzilla.mozilla.org/show_bug.cgi?id=988095&lt;br /&gt;
** Tokenserver: https://bugzilla.mozilla.org/show_bug.cgi?id=1025767&lt;br /&gt;
** Tokenserver: https://bugzilla.mozilla.org/show_bug.cgi?id=1027444&lt;br /&gt;
** Sync: https://bugzilla.mozilla.org/show_bug.cgi?id=1025735&lt;br /&gt;
** Sync: https://bugzilla.mozilla.org/show_bug.cgi?id=735102&lt;br /&gt;
** Sync: https://bugzilla.mozilla.org/show_bug.cgi?id=775395&lt;br /&gt;
* Planned&lt;br /&gt;
** Scaling for production traffic after release of Fx29&lt;br /&gt;
** Sync 1.5 migration work&lt;br /&gt;
** Operations readiness testing: See Bug 1006792&lt;br /&gt;
* Blockers&lt;br /&gt;
** none at this time&lt;br /&gt;
* Completed&lt;br /&gt;
** Pre-release load testing&lt;br /&gt;
** Previous load test results (short): http://loads.services.mozilla.com/&lt;br /&gt;
* Performance&lt;br /&gt;
** TBD&lt;br /&gt;
&lt;br /&gt;
== Quick Verification Of Stage Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment before getting started on load tests.&lt;br /&gt;
&lt;br /&gt;
* TokenServer+Verifier Stage environment:&lt;br /&gt;
 From the browser: https://token.stage.mozaws.net&lt;br /&gt;
 curl https://token.stage.mozaws.net&lt;br /&gt;
 curl -I https://token.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of tokenserver on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Alternate method:&lt;br /&gt;
 Use the test tool from here: https://github.com/edmoz/fxa-sync-client&lt;br /&gt;
 Install and check all collection types for a known account in Stage:&lt;br /&gt;
 bin/sync-cli.js -e EMAIL -p PASSWORD --env stage -t COLLECTION&lt;br /&gt;
     where -t is one of bookmarks,history,passwords,tabs,addons,prefs,forms&lt;br /&gt;
&lt;br /&gt;
* Verifier Stage environment:&lt;br /&gt;
 In the browser: https://verifier.stage.mozaws.net/&lt;br /&gt;
 curl https://verifier.stage.mozaws.net&lt;br /&gt;
 curl -I https://verifier.stage.mozaws.net&lt;br /&gt;
 &lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of browserid-verifier on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Sync Server Stage environment:&lt;br /&gt;
 Install server-syncstorage to the local host or AWS instance (see below)&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 Quick test against the TokenServer&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py --use-token-server &amp;lt;Stage TokenServer&amp;gt;&lt;br /&gt;
 Current example:&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py --use-token-server &lt;br /&gt;
     https://token.stage.mozaws.net/1.0/sync/1.5&lt;br /&gt;
 Quick tests against the Sync nodes&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &amp;lt;Stage Sync Node&amp;gt;#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 Current examples:&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 $ ./local/bin/python ./syncstorage/tests/functional/test_storage.py &lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net#&amp;lt;Node Secret&amp;gt;&lt;br /&gt;
 Get the Node Secret information from OPs&lt;br /&gt;
&lt;br /&gt;
* Using TPS&lt;br /&gt;
** The TPS FxA/Sync automated tests can be used as well, but the following file will have to be edited to add Stage environment configuration parameters: https://github.com/mozilla/gecko-dev/blob/master/testing/tps/tps/testrunner.py&lt;br /&gt;
** See the following wiki page for more information: https://wiki.mozilla.org/User_Services/Sync/Run_TPS&lt;br /&gt;
** See also: https://bugzilla.mozilla.org/show_bug.cgi?id=1006675&lt;br /&gt;
&lt;br /&gt;
== Quick Verification Of Production Deployments ==&lt;br /&gt;
* This is a quick sanity test of the environment after a new deployment.&lt;br /&gt;
&lt;br /&gt;
* Tokenserver+Verifier Production Environment&lt;br /&gt;
 In the browser: https://token.services.mozilla.com&lt;br /&gt;
 curl https://token.services.mozilla.com&lt;br /&gt;
 curl -I https://token.services.mozilla.com&lt;br /&gt;
 Then:&lt;br /&gt;
 Use the test tool from here: https://github.com/edmoz/fxa-sync-client&lt;br /&gt;
 Install and check all collection types for a known account in Production:&lt;br /&gt;
 bin/sync-cli.js -e PROD-EMAIL -p PASSWORD -t COLLECTION&lt;br /&gt;
     where -t is one of bookmarks,history,passwords,tabs,addons,prefs,forms&lt;br /&gt;
&lt;br /&gt;
* Verifier Production Environment&lt;br /&gt;
 In the browser: https://verifier.accounts.firefox.com&lt;br /&gt;
 curl https://verifier.accounts.firefox.com&lt;br /&gt;
 curl -I https://verifier.accounts.firefox.com&lt;br /&gt;
 Then:&lt;br /&gt;
 Use the simple &amp;quot;make test&amp;quot; command from an install of browserid-verifier on the localhost or AWS instance.&lt;br /&gt;
 cd loadtest&lt;br /&gt;
 make test SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* Sync Server Stage environment&lt;br /&gt;
 Sign in with a known FxA account and sync data with a current Production account (sync node).&lt;br /&gt;
 Create a new FxA account and set up sync.&lt;br /&gt;
&lt;br /&gt;
== Load Test Tool Client/Host ==&lt;br /&gt;
* It is always best to configure an AWS instance as the host for all load testing.&lt;br /&gt;
* All load tests can now run on the localhost (the AWS instance) or against the new Loads Cluster. See the following links for more information: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsV1ClientTestHost&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#Loads_Services_Cluster_Environment&lt;br /&gt;
&lt;br /&gt;
== Installing BrowserID-Verifier and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 $ git clone git://github.com/mozilla/browserid-verifier&lt;br /&gt;
 $ cd browserid-verifier&lt;br /&gt;
 $ npm install&lt;br /&gt;
 $ npm test&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
      Note: This should hit Stage by default: SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with the verifier.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against the Verifier in Stage ==&lt;br /&gt;
* Stage environment: &lt;br /&gt;
 $ make test&lt;br /&gt;
 or&lt;br /&gt;
 $ make test SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
 $ make bench&lt;br /&gt;
 or&lt;br /&gt;
 $ make bench SERVER_URL=https://verifier.stage.mozaws.net	&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: The Stage Verifier hits the Stage mockmyid server&lt;br /&gt;
&lt;br /&gt;
* Production environment: &lt;br /&gt;
 $ make test SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
 $ make bench SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for the Verifier ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://verifier.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=TBD&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://verifier.accounts.firefox.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing TokenServer+Verifier and the Loads tool on Localhost or AWS ==&lt;br /&gt;
* Installation:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/tokenserver&lt;br /&gt;
 $ cd tokenserver&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ make test&lt;br /&gt;
     Note: This is for local testing only&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
     Note: This should hit Prod by default: SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with TokenServer+Verifier.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against TokenServer+Verifier in Stage ==&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://token.stage.mozaws.net		&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: This also hits the Stage Verifier, which in turns hits the Stage mockmyid server&lt;br /&gt;
&lt;br /&gt;
* And while we are at it...&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 $ make bench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make test SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 $ make bench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for TokenServer+Verifier ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Production environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/tokenserver/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Installing Sync 1.5 and the Loads tool on Localhost or AWS ==&lt;br /&gt;
 Installation:&lt;br /&gt;
 $ git clone https://github.com/mozilla-services/server-syncstorage/&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 $ make build&lt;br /&gt;
 $ make test&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make build&lt;br /&gt;
&lt;br /&gt;
* Note: This will install a local copy of the Loads tool for use with Sync 1.5.&lt;br /&gt;
&lt;br /&gt;
== Running the load test against Sync 1.5 in Stage ==&lt;br /&gt;
* Loads against specific Sync nodes in Stage&lt;br /&gt;
 $ make test SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
 $ make bench SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
 Sync Stage nodes:&lt;br /&gt;
     https://sync-1-us-east-1.stage.mozaws.net&lt;br /&gt;
     https://sync-2-us-east-1.stage.mozaws.net&lt;br /&gt;
     https://sync-3-us-east-1.stage.mozaws.net&lt;br /&gt;
     ...etc...&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 &lt;br /&gt;
 NOTE: The OPs team has the SECRET string for Stage. Get it from them before you start testing.&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for Sync 1.5 in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://your.storagenode.here#SECRET&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Running a combined load test against TokenServer+Verifier and Sync 1.5 in Stage ==&lt;br /&gt;
* A combined loads test against TokenServer and Sync 1.5 in Stage&lt;br /&gt;
* This is done via the server-syncstorage directory that was cloned and built above&lt;br /&gt;
 $ cd server-syncstorage&lt;br /&gt;
 $ cd loadtest&lt;br /&gt;
 $ make test SERVER_URL=https://your.tokenserver.here&lt;br /&gt;
 $ make bench SERVER_URL=https://your.tokenserver.here&lt;br /&gt;
 &lt;br /&gt;
 Examples for Stage:&lt;br /&gt;
 $ make test SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 $ make bench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
 See https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#TokenServer.2BVerifier_Stage_Environment&lt;br /&gt;
 &lt;br /&gt;
 Note: the current version of &#039;make bench&#039; tends to use a lot of CPU and Memory on the localhost.    &lt;br /&gt;
 The recommendation is to use &#039;make test&#039; and &#039;make megabench&#039; instead (see below)...&lt;br /&gt;
 Note: The Stage Tokenserver hits the Stage Verifier, which, in turn, hits the mockmyid server.&lt;br /&gt;
&lt;br /&gt;
* And while we are at it...&lt;br /&gt;
 Dev environment:&lt;br /&gt;
 Examples:&lt;br /&gt;
 $ make test SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 $ make bench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
 &lt;br /&gt;
 Prod environment:&lt;br /&gt;
 Examples:&lt;br /&gt;
 $ make test SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 $ make bench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
 &lt;br /&gt;
 See https://wiki.mozilla.org/QA/Services/FxATestEnvironments#FxA.2C_TokenServer.2C_and_Sync_Production_Environments&lt;br /&gt;
 and https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#TokenServer_and_Sync_1.5_Dev_Environments&lt;br /&gt;
&lt;br /&gt;
== Using the Loads V1 Services Cluster for a combined load test in Stage ==&lt;br /&gt;
* By using the Loads Services Cluster, we can offload the broker/agents processes and save client-side CPU and memory.&lt;br /&gt;
* Changes were made to Makefile and the load test to use the cluster and some associated config files (for test, bench, megabench).&lt;br /&gt;
* Stage environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.stage.mozaws.net&lt;br /&gt;
&lt;br /&gt;
* Dev environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.dev.lcip.org&lt;br /&gt;
&lt;br /&gt;
* Prod environment:&lt;br /&gt;
 $ make megabench SERVER_URL=https://token.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
* REFs:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/LoadsToolsAndTesting1&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/tree/master/loadtest&lt;br /&gt;
&lt;br /&gt;
== Configuring The Load Tests ==&lt;br /&gt;
* Makefile&lt;br /&gt;
** The SERVER_URL constant can be changed.&lt;br /&gt;
&lt;br /&gt;
* Config files&lt;br /&gt;
** For make test (BrowserID-Verifier, TokenServer, Sync, Combined):&lt;br /&gt;
*** Number of hits&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
&lt;br /&gt;
** For make bench (BrowserID-Verifier, TokenServer, Sync, Combined):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
&lt;br /&gt;
** For make megabench (using the LoadsCluster with BrowserID-Verifier, TokenSerer, Sync, Combined):&lt;br /&gt;
*** Number of concurrent users&lt;br /&gt;
*** Duration of test&lt;br /&gt;
*** Include file (this is code dependent)&lt;br /&gt;
*** Python dependencies (this is code dependent)&lt;br /&gt;
*** Agents to use for testing (default is 5, max is currently 20, but depends on the number of concurrent load tests running)&lt;br /&gt;
*** Detach mode (leave as defined for now to automatically detach from the load test once it starts on the localhost)&lt;br /&gt;
*** Observer (this can be email or irc - the default is irc #services-dev channel) &lt;br /&gt;
*** SSH (the user account needed to SSH into the loads cluster - the default is ubuntu)&lt;br /&gt;
&lt;br /&gt;
* Tokenserver load test code&lt;br /&gt;
** The Tokenserver load test can be configured - see the following lines:&lt;br /&gt;
** Basic Settings: https://github.com/mozilla-services/loop-server/blob/master/loadtests/loadtest.py&lt;br /&gt;
** MockMyID: https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L19-L36&lt;br /&gt;
** Percentages: https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L39-L51&lt;br /&gt;
&lt;br /&gt;
* Verifier load test code&lt;br /&gt;
** The Verifier load test can be configured - see the following lines:&lt;br /&gt;
** Various settings: https://github.com/mozilla/browserid-verifier/blob/master/loadtest/loadtest.py#L13-L53&lt;br /&gt;
&lt;br /&gt;
* Sync Server load test code&lt;br /&gt;
** The Sync Server load test can be configured - see the following lines:&lt;br /&gt;
** Setting MockMyID: https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py#L26-L45&lt;br /&gt;
** Setting test distributions: https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py#L48-L83&lt;br /&gt;
&lt;br /&gt;
* REFs: &lt;br /&gt;
** https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier/blob/master/loadtest/loadtest.py&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage/blob/master/loadtest/stress.py&lt;br /&gt;
&lt;br /&gt;
== Test Coverage and Stats ==&lt;br /&gt;
* Basic tweakable values for all load tests&lt;br /&gt;
** users = number of concurrent users/agent&lt;br /&gt;
** agents = number of agents out of the cluster, otherwise errors out&lt;br /&gt;
** duration = in seconds&lt;br /&gt;
** hits = 1 or X number of rounds/hits/iterations&lt;br /&gt;
&lt;br /&gt;
* TokenServer&lt;br /&gt;
** File location: tokenserver/loadtest/loadtest.py&lt;br /&gt;
** Inside NoteAssignmentTest, test_realistic is the main load test; the others are for specific behaviors&lt;br /&gt;
** The test runs as following:&lt;br /&gt;
 95% ask for assertions on existing users (on a DB filled by test_single_token_exchange)&lt;br /&gt;
 4% ask for assertion on a new use&lt;br /&gt;
 1% ask for a bad assertion&lt;br /&gt;
** A bug has been filed to get the following additional coverage for the load test:&lt;br /&gt;
*** generation numbers in assertion&lt;br /&gt;
*** client state string&lt;br /&gt;
** A bug has been filed to get some integration tests written:&lt;br /&gt;
*** to cover the edge/error cases not in the load test&lt;br /&gt;
*** to be pointed at a remote server&lt;br /&gt;
&lt;br /&gt;
* Sync&lt;br /&gt;
** File location: server-syncstorage/loadtest/stress.py&lt;br /&gt;
** This is the Sync 2.0 load test that has been back-ported for Sync 1.5.&lt;br /&gt;
** The stress.py file is fully configurable for the following:&lt;br /&gt;
*** client probability&lt;br /&gt;
*** client distribution&lt;br /&gt;
*** collections&lt;br /&gt;
** A bug has been filed to add support for load testing tabs&lt;br /&gt;
*** The tab collection it uses memcache; we need to figure out a way to test it without overloading the server&lt;br /&gt;
** There are currently no constants to define how to select percentages per collection type&lt;br /&gt;
** Right now, we need to manually configure the collections list in stress.py:&lt;br /&gt;
*** collections = [&#039;bookmarks&#039;, &#039;forms&#039;, &#039;passwords&#039;, &#039;history&#039;, &#039;prefs&#039;]&lt;br /&gt;
*** Basically, you can add more entries of each type, since the load test (per user/again/hit/pass) picks randomly from the list for any given request...&lt;br /&gt;
&lt;br /&gt;
== Analyzing the Results ==&lt;br /&gt;
* There are several methods and tools for analyzing the load test results.&lt;br /&gt;
&lt;br /&gt;
* 1. Using the Loads Services Cluster dashboard&lt;br /&gt;
** All loads tests using this cluster generate a live report and a run report available on this site:&lt;br /&gt;
*** http://loads.services.mozilla.com&lt;br /&gt;
*** or http://ec2-54-212-44-143.us-west-2.compute.amazonaws.com (direct)&lt;br /&gt;
** You can quickly review the following here: Status, Configuration, Results, Custom Metrics, and Errors.&lt;br /&gt;
&lt;br /&gt;
* Tokenserver Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* Verifier Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* Sync Custom Metrics&lt;br /&gt;
** addFailure&lt;br /&gt;
&lt;br /&gt;
* NOTE: If you want more details on the dashboard, please file an issue here: https://github.com/mozilla-services/loads&lt;br /&gt;
&lt;br /&gt;
== Debugging the Issues ==&lt;br /&gt;
* There are several methods and tools for debugging the load test errors and other issues.&lt;br /&gt;
&lt;br /&gt;
* 1. Important logs for TokenServer (per server)&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/tokenserver.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/token.log.*&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.error.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/process_account_deletions.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.log&lt;br /&gt;
** /media/ephemeral0/logs/tokenserver/purge_old_records.error.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stdout.log&lt;br /&gt;
** /var/log/hekad/tokenserver.stderr.log&lt;br /&gt;
&lt;br /&gt;
* 2. Important logs for Verifier (per server)&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_err.log&lt;br /&gt;
** /media/ephemeral0/fxa-browserid-verifier/verifier_out.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/fxa-browserid-verifier.access.log&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.access.log (not in use)&lt;br /&gt;
** /media/ephemeral0/nginx/logs/default.error.log (not in use)&lt;br /&gt;
** /media/ephemeral0/squid/access.log&lt;br /&gt;
** /var/log/circus.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stderr.log&lt;br /&gt;
** /var/log/hekad/fxa-browserid_verifier.stdout.log &lt;br /&gt;
&lt;br /&gt;
* 3. Important error logs for Sync (per Sync node)&lt;br /&gt;
** /media/ephemeral0/logs/&lt;br /&gt;
** /media/ephemeral0/nginx/access.log&lt;br /&gt;
** /media/ephemeral0/error.log&lt;br /&gt;
** /media/ephemeral0/sync/sync.err&lt;br /&gt;
** /media/ephemeral0/sync/sync.log&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Acceptable TokenServer errors:&lt;br /&gt;
 1% - 2% failures (as the following)&lt;br /&gt;
 token.log:&lt;br /&gt;
 &amp;quot;name&amp;quot;: &amp;quot;token.assertion.invalid_signature_error&amp;quot;&lt;br /&gt;
 &amp;quot;name&amp;quot;: &amp;quot;token.assertion.verify_failure&amp;quot;&lt;br /&gt;
 nginx access.log:&lt;br /&gt;
 401s&lt;br /&gt;
 NOTE: Values can be tweaked here:&lt;br /&gt;
     https://github.com/mozilla-services/tokenserver/blob/master/loadtest/loadtest.py#L58-L60&lt;br /&gt;
 &lt;br /&gt;
 The following types of errors are known:&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
     Exception KeyError: KeyError(49564400,) in &amp;lt;module &#039;threading&#039;...&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.log&lt;br /&gt;
     ...&amp;quot;Starting new HTTP connection (9): 127.0.0.1&amp;quot;, &amp;quot;hostname&amp;quot;: ...&lt;br /&gt;
     {&amp;quot;error&amp;quot;: &amp;quot;StopIteration()&amp;quot;, &amp;quot;traceback&amp;quot;: &amp;quot;Uncaught exception:\n  &lt;br /&gt;
     File \&amp;quot;/data/tokenserver/local/lib/python2.6/site-packages/gunicorn/workers/async.py\&amp;quot;...&lt;br /&gt;
     ...&amp;quot;Connection pool is full, discarding connection: 127.0.0.1&amp;quot;, &amp;quot;...&lt;br /&gt;
 REF:&lt;br /&gt;
 https://bugzilla.mozilla.org/show_bug.cgi?id=1040396&lt;br /&gt;
 https://bugzilla.mozilla.org/show_bug.cgi?id=1040397&lt;br /&gt;
 &lt;br /&gt;
 OLD: Also, it may be the case that the following errors are &amp;quot;acceptable&amp;quot; if TS Stage is larger than Verifier Stage:&lt;br /&gt;
 /media/ephemeral0/logs/tokenserver/token.error.log&lt;br /&gt;
 Verifier-related errors of these types:&lt;br /&gt;
 &amp;quot;HttpConnectionPool is full, discarding connection: verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
 &amp;quot;Resetting dropped connection: verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
 &amp;quot;Starting new HTTPS connection (179): verifier.stage.mozaws.net&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Acceptable Verifier errors:&lt;br /&gt;
 The verifier_out.log will show errors of the following types:&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;untrusted issuer...&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;expired&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;algorithms do not match&#039;&lt;br /&gt;
 result: &#039;failure&#039;,\n  reason: &#039;audience mismatch: scheme mismatch&#039;&lt;br /&gt;
&lt;br /&gt;
* Acceptable Sync node errors:&lt;br /&gt;
 In the nginx access.log files:&lt;br /&gt;
 We will see some percentage of 404s. Right now we see the following:&lt;br /&gt;
     14% 404s (compared to the total count of 200s)&lt;br /&gt;
     with the config set up as follows:&lt;br /&gt;
          users = 20&lt;br /&gt;
          duration = 1800&lt;br /&gt;
          agents = 5&lt;br /&gt;
 Ideally, the overall percentage of 404s should drop the longer the load test.&lt;br /&gt;
 Usually, you will not see 304s, 400s, 412s, or 415s for a load test,&lt;br /&gt;
 although they may show up in the logs after running the remote integration tests.&lt;br /&gt;
 &lt;br /&gt;
 In /var/log/hekad/sync_1_5.stderr.log&lt;br /&gt;
 You may see some Decoder &#039;Sync-1_5-SlowQuery-MySqlSlowQueryDecoder&#039; error: Failed parsing&lt;br /&gt;
 and a lot of BSO INSERTs&lt;br /&gt;
 &lt;br /&gt;
 In /media/ephemeral0/logs/sync/sync.err&lt;br /&gt;
 You should see expected skew and QueuePool messages and Deprecation warnings&lt;br /&gt;
 Also, these are known&lt;br /&gt;
 Exception SystemExit&lt;br /&gt;
 Exception KeyError&lt;br /&gt;
 This is probably https://bugzilla.mozilla.org/show_bug.cgi?id=1040397&lt;br /&gt;
&lt;br /&gt;
== Monitoring TS and Sync Stage ==&lt;br /&gt;
* Loads dashboard:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
* Cluster status&lt;br /&gt;
** Check directly from the Loads Cluster dashboard:&lt;br /&gt;
 Agents statuses&lt;br /&gt;
 Launch a health check on all agents&lt;br /&gt;
* and also on StackDriver: https://app.stackdriver.com/groups/6664/stage-loads-cluster&lt;br /&gt;
&lt;br /&gt;
* For all other monitoring, see the following section:&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments#Monitoring_the_Stage_Environment&lt;br /&gt;
&lt;br /&gt;
== Performance Testing Information ==&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
== Details on the Load Test tool ==&lt;br /&gt;
* The documentation can be found here:&lt;br /&gt;
** https://loads.readthedocs.org/en/latest&lt;br /&gt;
* The repositories are here:&lt;br /&gt;
** https://github.com/mozilla-services/loads&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws&lt;br /&gt;
** https://github.com/mozilla-services/loads-web&lt;br /&gt;
* The Services cluster is here:&lt;br /&gt;
** http://loads.services.mozilla.com&lt;br /&gt;
&lt;br /&gt;
== Known Bugs, Issues, and Tasks ==&lt;br /&gt;
* Tokenserver, Verifier, and Sync&lt;br /&gt;
** Meta: https://bugzilla.mozilla.org/show_bug.cgi?id=907479&lt;br /&gt;
** Meta: https://bugzilla.mozilla.org/show_bug.cgi?id=1008066&lt;br /&gt;
** Meta: https://bugzilla.mozilla.org/show_bug.cgi?id=1014411&lt;br /&gt;
&lt;br /&gt;
** Tokenserver: &lt;br /&gt;
*** Repo: https://github.com/mozilla-services/tokenserver/issues &lt;br /&gt;
*** Bugzilla: http://mzl.la/1s4qZKn&lt;br /&gt;
&lt;br /&gt;
** BrowserID-Verifier:&lt;br /&gt;
** Repo: https://github.com/mozilla/browserid-verifier/issues&lt;br /&gt;
** Bugzilla: no specific cateogory&lt;br /&gt;
&lt;br /&gt;
** Sync:&lt;br /&gt;
** Repo: https://github.com/mozilla-services/server-syncstorage/issues&lt;br /&gt;
** Bugzilla: http://mzl.la/VUrYQ5&lt;br /&gt;
&lt;br /&gt;
* OPs and Infrastructure&lt;br /&gt;
** https://github.com/mozilla-services/puppet-config/issues&lt;br /&gt;
** https://github.com/mozilla-services/svcops/issues&lt;br /&gt;
&lt;br /&gt;
* Loads Tool and Cluster&lt;br /&gt;
** https://github.com/mozilla-services/loads/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-aws/issues&lt;br /&gt;
** https://github.com/mozilla-services/loads-web/issues&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Other URLs&lt;br /&gt;
** http://restmail.net&lt;br /&gt;
** https://mockmyid.com&lt;br /&gt;
* Repositories&lt;br /&gt;
** https://github.com/mozilla-services/tokenserver&lt;br /&gt;
** https://github.com/mozilla-services/server-syncstorage&lt;br /&gt;
** https://github.com/mozilla/browserid-verifier&lt;br /&gt;
** https://github.com/mozilla/browserid-local-verify&lt;br /&gt;
** https://github.com/callahad/mockmyid&lt;br /&gt;
** https://github.com/mozilla/restmail.net&lt;br /&gt;
* Documentation&lt;br /&gt;
** https://docs.services.mozilla.com&lt;br /&gt;
** https://docs.services.mozilla.com/token/&lt;br /&gt;
** https://wiki.mozilla.org/Services/Sagrada/TokenServer&lt;br /&gt;
** https://docs.services.mozilla.com/sync/&lt;br /&gt;
* The QA Test Environments: &lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/FxATestEnvironments&lt;br /&gt;
** https://wiki.mozilla.org/QA/Services/TSVerifierSyncTestEnvironments&lt;br /&gt;
* Deploying the FxA Load Test environment for broker/agents usage:&lt;br /&gt;
** https://github.com/mozilla/fxa-deployment&lt;br /&gt;
* Sync 1.5 protocol, documentation, etc.&lt;br /&gt;
** https://github.com/mozilla-services/docs&lt;br /&gt;
** https://docs.services.mozilla.com/#how-to&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-fxa.html&lt;br /&gt;
** https://docs.services.mozilla.com/token/apis.html&lt;br /&gt;
** https://docs.services.mozilla.com/storage/apis-1.5.html&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-sync-1.5.html&lt;br /&gt;
** https://docs.services.mozilla.com/howtos/run-sync-1.5.html&lt;br /&gt;
** https://github.com/mozilla-services/syncserver&lt;br /&gt;
* OPs pages for stats collection, logging, monitoring&lt;br /&gt;
** TBD&lt;/div&gt;</summary>
		<author><name>Jbonacci</name></author>
	</entry>
</feed>