1 # VTS Dashboard
2
3 ## Introduction
4
5 The VTS Dashboard displays the summarized results of the Multi Device Tests along with graphs.
6
7 ## Installation
8
9 ### Steps to run locally:
10
11 1. Google App Engine uses Java 8. Install Java 8 before running running locally:
12 'sudo apt install openjdk-8-jdk'
13
14 To use java 8:
15 Copy the following lines in ~/.bashrc :
16
17 ```
18 function setup_jdk() {
19 # Remove the current JDK from PATH
20 if [ -n "$JAVA_HOME" ] ; then
21 PATH=${PATH/$JAVA_HOME\/bin:/}
22 fi
23 export JAVA_HOME=$1
24 export PATH=$JAVA_HOME/bin:$PATH
25 }
26
27 function use_java8() {
28 # setup_jdk /usr/java/jre1.8.0_73
29 setup_jdk /usr/lib/jvm/java-8-openjdk-amd64
30 }
31
32 Then from cmd:
33 $ use_java8
34 ```
35
36 2. Maven is used for build. Install Maven 3.3.9:
37 Download maven from:
38 https://maven.apache.org/download.cgi
39
40 Steps to Install Maven:
41 1) Unzip the Binary tar:
42 tar -zxf apache-maven-3.3.3-bin.tar.gz
43
44 2) Move the application directory to /usr/local
45 sudo cp -R apache-maven-3.3.3 /usr/local
46
47 3) Make a soft link in /usr/bin for universal access of mvn
48 sudo ln -s /usr/local/apache-maven-3.3.3/bin/mvn /usr/bin/mvn
49
50 4) Verify maven installation:
51 $ mvn -v
52
53 The output should resemble this:
54
55 Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T08:41:47-08:00)
56 Maven home: /opt/apache-maven-3.3.9
57 Java version: 1.8.0_45-internal, vendor: Oracle Corporation
58 Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
59 Default locale: en_US, platform encoding: UTF-8
60 OS name: "linux", version: "3.13.0-88-generic", arch: "amd64", family: "unix"
61
62 3. Install Google Cloud SDK. Follow the instructions listed on official source:
63 https://cloud.google.com/sdk/docs/quickstart-linux
64
65 The default location where the application searches for a google-cloud-sdk is:
66 /usr/local/share/google/google-cloud-sdk
67
68 Therefore move the extracted folder to this location: /usr/local/share/google/
69
70 Otherwise, to have a custom location, specify the location of
71 google-cloud-sdk in test/vti/dashboard/pom.xml by putting the configuration:
72
73 ```
74 <configuration>
75 <gcloud_directory>PATH/TO/GCLOUD_DIRECTORY</gcloud_directory>
76 </configuration>
77 ```
78 within the 'com.google.appengine' plugin tag :
79
80 ## To run GAE on local machine:
81
82 $ cd test/vti/dashboard
83 $ mvn appengine:devserver
84
85 ## To deploy to Google App Engine
86
87 $ cd test/vti/dashboard
88 $ mvn appengine:update
89
90 visit https://<YOUR-PROJECT-NAME>.appspot.com
91
92 ## Update config file through gcloud command
93
94 You can deploy or update GAE's a config file without deploying the whole project.
95 The next commands show how to do it.
96
97 ```
98 gcloud app deploy --project=<YOUR-PROJECT-NAME> cron.xml
99 gcloud app deploy --project=<YOUR-PROJECT-NAME> queue.xml
100 gcloud app deploy --project=<YOUR-PROJECT-NAME> datastore-indexes.xml
101 ```
102
103 ## Test Data
104
105 ### Purpose
106
107 When you start your local GAE server, you will see empty page as the local datastore do not have any data.
108 So we need to put some sample data into local datastore so that developers are able to continue to
109 develop new features or fix bugs. Thus, we developed the next two test APIs, which are only available
110 in your local dev environment.
111
112 ```
113 http://127.0.0.1:8080/api/test_data/report
114 http://127.0.0.1:8080/api/test_data/plan
115 ```
116
117 ### How to set test data on json files for generating mock data on local dev server
118
119 If you want to generate some mock data for your local development, you need to set some fake data
120 on json files under the testdata folder. However, you need to abide by some rules in doing this,
121 otherwise you will end up with errors from the mock data dev API.
122
123 First, in test-plan-report-data.json, you need to set the same number of data under "testCaseNames"
124 and "results". For example, if you put 5 elements of data in "testCaseNames", you should put the same
125 number of data under "results".
126
127 ```json
128 ........
129 "testCaseRunList": [
130 {
131 "testCaseNames": [
132 "stdatomic.atomic_exchange_64bit",
133 "stdatomic.atomic_compare_exchange_64bit",
134 "stdatomic.atomic_exchange_64bit",
135 "stdatomic.atomic_compare_exchange_64bit",
136 "stdatomic.atomic_exchange_64bit",
137 "stdatomic.atomic_compare_exchange_64bit"
138 ],
139 "results": [
140 2,
141 2,
142 2,
143 2,
144 2,
145 2
146 ]
147 }
148 ],
149 ........
150 ```
151
152 Second, in test-report-data.json file, you need to make sure that "testModules" should have
153 the "testName"'s value under "testRunList" and the "testTimes" should have the "startTimestamp"'s value
154 in the test-report-data.json file.
155
156 test-report-data.json
157 ```json
158 ......
159 "testRunList": [
160 {
161 "testName": "BionicUnitTests", <- "testModules" should be copied from here
162 "type": 1,
163 "startTimestamp":1515562811, <- "testTimes" should be copied from here
164 ......
165 {
166 "testName": "CpuProfilingTest", <- "testModules" should be copied from here
167 "type": 2,
168 "startTimestamp":1515562811, <- "testTimes" should be copied from here
169 ......
170 ```
171
172 test-plan-report-data.json
173 ```json
174 ......
175 {
176 "testPlanName": "vts-serving-staging-fuzz",
177 "testModules": ["BionicUnitTests", "CpuProfilingTest"],
178 "testTimes": [1515562811, 1515562811]
179 },
180 {
181 "testPlanName": "vts-serving-staging-hal-conventional",
182 "testModules": ["BionicUnitTests", "CpuProfilingTest"],
183 "testTimes": [1515562811, 1515562811]
184 }
185 ......
186 ```
187 "testModules" and "testTimes"'s elements order is also matter.
188
189 ### Command to generate mock data through API
190
191 The next two commands will generate mock data in your local dev datastore.
192 The execution order of the commands is very important, otherwise you can't find some of the data in your local datastore.
193 Thus, please execute the below command as I wrote in order.
194
195 ```
196 curl -d @testdata/test-report-data.json -m 30 -X POST http://127.0.0.1:8080/api/test_data/report -H "Content-Type: application/json" --verbose
197 curl -d @testdata/test-plan-report-data.json -m 30 -X POST http://127.0.0.1:8080/api/test_data/plan -H "Content-Type: application/json" --verbose
198 ```
199
200 ## Monitoring
201
202 The following steps list how to create a monitoring service for the VTS Dashboard.
203
204 ### Create a Stackdriver account
205
206 1. Go to Google Cloud Platform Console:
207 http://console.developers.google.com
208
209 2. In the Google Cloud Platform Console, select Stackdriver > Monitoring.
210 If your project is not in a Stackdriver account you'll see a message to
211 create a new project.
212
213 3. Click Create new Stackdriver account and then Continue.
214
215 4. With your project shown, click Create account.
216
217 5. In the page, "Add Google Cloud Platform projects to monitor", click Continue to skip ahead.
218
219 6. In the page, "Monitor AWS accounts", click Done to skip ahead.
220
221 7. In a few seconds you see the following message:
222 "Finished Initial collection"
223 Click Launch Monitoring.
224
225 8. In the page, "Get reports by email", click No reports and Continue.
226
227 9. You will see your Stackdriver account dashboard.
228 Close the "Welcome to Stackdriver" banner if you don't need it.
229
230 ### Steps to create an uptime check and an alerting policy
231
232 1. Go to Stack Monitoring console:
233 https://app.google.stackdriver.com/
234
235 2. Go to Alerting > Uptime Checks in the top menu and then click Add Uptime Check.
236 You see the New Uptime Check panel.
237
238 3. Fill in the following fields for the uptime check:
239
240 Check type: HTTP
241 Resource Type: Instance
242 Applies To: Single, lamp-1-vm
243 Leave the other fields with their default values.
244
245 4. Click Test to verify your uptime check is working.
246
247 5. Click Save. After you click on save you'll see a panel to
248 'Create Alerting Policy'
249
250 6. Fill out the configuration for notifications and click save policy.
251
252 ### Test the check and alert
253
254 This procedure can take up to fifteen minutes.
255
256 To test the check and alert, go to the VM Instances page, select your instance, and click Stop from the top menu.
257 You'll have to wait up to five minutes for the next uptime check to fail. The alert and notification don't happen until the next failure occurs.
258
259 To correct the "problem," return to the VM Instances page, select your instance, and click Start from the top menu.
260