# VTS Dashboard
## Introduction
The VTS Dashboard displays the summarized results of the Multi Device Tests along with graphs.
## Installation
### Steps to run locally:
1. Google App Engine uses Java 8. Install Java 8 before running running locally:
'sudo apt install openjdk-8-jdk'
To use java 8:
Copy the following lines in ~/.bashrc :
```
function setup_jdk() {
# Remove the current JDK from PATH
if [ -n "$JAVA_HOME" ] ; then
PATH=${PATH/$JAVA_HOME\/bin:/}
fi
export JAVA_HOME=$1
export PATH=$JAVA_HOME/bin:$PATH
}
function use_java8() {
# setup_jdk /usr/java/jre1.8.0_73
setup_jdk /usr/lib/jvm/java-8-openjdk-amd64
}
Then from cmd:
$ use_java8
```
2. Maven is used for build. Install Maven 3.3.9:
Download maven from:
https://maven.apache.org/download.cgi
Steps to Install Maven:
1) Unzip the Binary tar:
tar -zxf apache-maven-3.3.3-bin.tar.gz
2) Move the application directory to /usr/local
sudo cp -R apache-maven-3.3.3 /usr/local
3) Make a soft link in /usr/bin for universal access of mvn
sudo ln -s /usr/local/apache-maven-3.3.3/bin/mvn /usr/bin/mvn
4) Verify maven installation:
$ mvn -v
The output should resemble this:
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T08:41:47-08:00)
Maven home: /opt/apache-maven-3.3.9
Java version: 1.8.0_45-internal, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.13.0-88-generic", arch: "amd64", family: "unix"
3. Install Google Cloud SDK. Follow the instructions listed on official source:
https://cloud.google.com/sdk/docs/quickstart-linux
The default location where the application searches for a google-cloud-sdk is:
/usr/local/share/google/google-cloud-sdk
Therefore move the extracted folder to this location: /usr/local/share/google/
Otherwise, to have a custom location, specify the location of
google-cloud-sdk in test/vti/dashboard/pom.xml by putting the configuration:
```
<configuration>
<gcloud_directory>PATH/TO/GCLOUD_DIRECTORY</gcloud_directory>
</configuration>
```
within the 'com.google.appengine' plugin tag :
## To run GAE on local machine:
$ cd test/vti/dashboard
$ mvn appengine:devserver
## To deploy to Google App Engine
$ cd test/vti/dashboard
$ mvn appengine:update
visit https://<YOUR-PROJECT-NAME>.appspot.com
## Update config file through gcloud command
You can deploy or update GAE's a config file without deploying the whole project.
The next commands show how to do it.
```
gcloud app deploy --project=<YOUR-PROJECT-NAME> cron.xml
gcloud app deploy --project=<YOUR-PROJECT-NAME> queue.xml
gcloud app deploy --project=<YOUR-PROJECT-NAME> datastore-indexes.xml
```
## Test Data
### Purpose
When you start your local GAE server, you will see empty page as the local datastore do not have any data.
So we need to put some sample data into local datastore so that developers are able to continue to
develop new features or fix bugs. Thus, we developed the next two test APIs, which are only available
in your local dev environment.
```
http://127.0.0.1:8080/api/test_data/report
http://127.0.0.1:8080/api/test_data/plan
```
### How to set test data on json files for generating mock data on local dev server
If you want to generate some mock data for your local development, you need to set some fake data
on json files under the testdata folder. However, you need to abide by some rules in doing this,
otherwise you will end up with errors from the mock data dev API.
First, in test-plan-report-data.json, you need to set the same number of data under "testCaseNames"
and "results". For example, if you put 5 elements of data in "testCaseNames", you should put the same
number of data under "results".
```json
........
"testCaseRunList": [
{
"testCaseNames": [
"stdatomic.atomic_exchange_64bit",
"stdatomic.atomic_compare_exchange_64bit",
"stdatomic.atomic_exchange_64bit",
"stdatomic.atomic_compare_exchange_64bit",
"stdatomic.atomic_exchange_64bit",
"stdatomic.atomic_compare_exchange_64bit"
],
"results": [
2,
2,
2,
2,
2,
2
]
}
],
........
```
Second, in test-report-data.json file, you need to make sure that "testModules" should have
the "testName"'s value under "testRunList" and the "testTimes" should have the "startTimestamp"'s value
in the test-report-data.json file.
test-report-data.json
```json
......
"testRunList": [
{
"testName": "BionicUnitTests", <- "testModules" should be copied from here
"type": 1,
"startTimestamp":1515562811, <- "testTimes" should be copied from here
......
{
"testName": "CpuProfilingTest", <- "testModules" should be copied from here
"type": 2,
"startTimestamp":1515562811, <- "testTimes" should be copied from here
......
```
test-plan-report-data.json
```json
......
{
"testPlanName": "vts-serving-staging-fuzz",
"testModules": ["BionicUnitTests", "CpuProfilingTest"],
"testTimes": [1515562811, 1515562811]
},
{
"testPlanName": "vts-serving-staging-hal-conventional",
"testModules": ["BionicUnitTests", "CpuProfilingTest"],
"testTimes": [1515562811, 1515562811]
}
......
```
"testModules" and "testTimes"'s elements order is also matter.
### Command to generate mock data through API
The next two commands will generate mock data in your local dev datastore.
The execution order of the commands is very important, otherwise you can't find some of the data in your local datastore.
Thus, please execute the below command as I wrote in order.
```
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
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
```
## Monitoring
The following steps list how to create a monitoring service for the VTS Dashboard.
### Create a Stackdriver account
1. Go to Google Cloud Platform Console:
http://console.developers.google.com
2. In the Google Cloud Platform Console, select Stackdriver > Monitoring.
If your project is not in a Stackdriver account you'll see a message to
create a new project.
3. Click Create new Stackdriver account and then Continue.
4. With your project shown, click Create account.
5. In the page, "Add Google Cloud Platform projects to monitor", click Continue to skip ahead.
6. In the page, "Monitor AWS accounts", click Done to skip ahead.
7. In a few seconds you see the following message:
"Finished Initial collection"
Click Launch Monitoring.
8. In the page, "Get reports by email", click No reports and Continue.
9. You will see your Stackdriver account dashboard.
Close the "Welcome to Stackdriver" banner if you don't need it.
### Steps to create an uptime check and an alerting policy
1. Go to Stack Monitoring console:
https://app.google.stackdriver.com/
2. Go to Alerting > Uptime Checks in the top menu and then click Add Uptime Check.
You see the New Uptime Check panel.
3. Fill in the following fields for the uptime check:
Check type: HTTP
Resource Type: Instance
Applies To: Single, lamp-1-vm
Leave the other fields with their default values.
4. Click Test to verify your uptime check is working.
5. Click Save. After you click on save you'll see a panel to
'Create Alerting Policy'
6. Fill out the configuration for notifications and click save policy.
### Test the check and alert
This procedure can take up to fifteen minutes.
To test the check and alert, go to the VM Instances page, select your instance, and click Stop from the top menu.
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.
To correct the "problem," return to the VM Instances page, select your instance, and click Start from the top menu.