diff --git a/package-lock.json b/package-lock.json index 706a5bd..c2349ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -404,8 +404,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -426,14 +425,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -448,20 +445,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -578,8 +572,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -591,7 +584,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -606,7 +598,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -614,14 +605,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -640,7 +629,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -721,8 +709,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -734,7 +721,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -820,8 +806,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -857,7 +842,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -877,7 +861,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -921,14 +904,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, @@ -1817,7 +1798,6 @@ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, - "optional": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -3044,8 +3024,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true, - "optional": true + "dev": true }, "constants-browserify": { "version": "1.0.0", @@ -3441,8 +3420,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true + "dev": true }, "depd": { "version": "1.1.2", @@ -4413,8 +4391,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -4435,14 +4412,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4457,20 +4432,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -4587,8 +4559,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -4600,7 +4571,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -4615,7 +4585,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -4623,14 +4592,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -4649,7 +4616,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -4737,8 +4703,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -4750,7 +4715,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -4836,8 +4800,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -4873,7 +4836,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -4893,7 +4855,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -4937,14 +4898,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, @@ -4953,7 +4912,6 @@ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, - "optional": true, "requires": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", @@ -4966,7 +4924,6 @@ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, - "optional": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -5004,8 +4961,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true, - "optional": true + "dev": true }, "get-stream": { "version": "3.0.0", @@ -5225,8 +5181,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "optional": true + "dev": true }, "has-value": { "version": "1.0.0", @@ -5952,8 +5907,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true, - "optional": true + "dev": true }, "is-windows": { "version": "1.0.2", @@ -6651,7 +6605,6 @@ "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, - "optional": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -6664,8 +6617,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "optional": true + "dev": true } } }, @@ -6952,8 +6904,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true, - "optional": true + "dev": true }, "map-visit": { "version": "1.0.0", @@ -7591,7 +7542,6 @@ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, - "optional": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -8663,7 +8613,6 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, - "optional": true, "requires": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -8675,7 +8624,6 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, - "optional": true, "requires": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -8686,8 +8634,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "optional": true + "dev": true } } }, @@ -8696,7 +8643,6 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, - "optional": true, "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -8707,7 +8653,6 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, - "optional": true, "requires": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -8718,7 +8663,6 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, - "optional": true, "requires": { "pinkie-promise": "^2.0.0" } @@ -10005,7 +9949,6 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, - "optional": true, "requires": { "is-utf8": "^0.2.0" } @@ -11399,7 +11342,6 @@ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, - "optional": true, "requires": { "string-width": "^1.0.2 || 2" } diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 9d6b2f1..31148b5 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,4 +1,5 @@ import { Component } from '@angular/core'; +import { Router } from '@angular/router'; @Component({ selector: 'app-root', @@ -7,4 +8,10 @@ import { Component } from '@angular/core'; }) export class AppComponent { title = 'frontend'; + + constructor(router: Router) { + if (localStorage.getItem('auth_token') !== null && router.url == '/') { + router.navigate(['/generator-search']); + } + } } diff --git a/src/app/authentication/authentication.component.ts b/src/app/authentication/authentication.component.ts index d7072d7..4a03fe6 100644 --- a/src/app/authentication/authentication.component.ts +++ b/src/app/authentication/authentication.component.ts @@ -54,6 +54,7 @@ export class AuthenticationComponent implements OnInit { localStorage.removeItem('gen_name'); localStorage.removeItem('data_type'); localStorage.removeItem('fault_type'); + // localStorage.removeItem('auth_token'); } } diff --git a/src/app/generator-search/generator-search.component.css b/src/app/generator-search/generator-search.component.css index f570392..d64ac07 100644 --- a/src/app/generator-search/generator-search.component.css +++ b/src/app/generator-search/generator-search.component.css @@ -14,7 +14,11 @@ a#genLink { } */ mat-card.generator-card { - width: 300px; + width: 400px; height: 300px; margin: 5px; } + +mat-card:hover { + cursor: pointer; +} diff --git a/src/app/header/header.component.css b/src/app/header/header.component.css index 1a76c27..c70e61e 100644 --- a/src/app/header/header.component.css +++ b/src/app/header/header.component.css @@ -10,4 +10,7 @@ } .clearfix { overflow: auto; +} +a:hover { + cursor: pointer; } \ No newline at end of file diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html index 96dc1f9..f437ec4 100644 --- a/src/app/header/header.component.html +++ b/src/app/header/header.component.html @@ -9,11 +9,11 @@ diff --git a/src/app/header/header.component.ts b/src/app/header/header.component.ts index 5938bb4..0cac245 100644 --- a/src/app/header/header.component.ts +++ b/src/app/header/header.component.ts @@ -23,6 +23,9 @@ export class HeaderComponent implements OnInit { resetGenAndVisualize() { this.resetAndRedirect('/visualize-all'); } + isLoggedIn(): boolean { + return (localStorage.getItem('auth_token') !== null); + } resetAndRedirect(url: string) { this.login.getToken().then(() => { diff --git a/src/app/services/login.service.ts b/src/app/services/login.service.ts index 6448efd..013ad92 100644 --- a/src/app/services/login.service.ts +++ b/src/app/services/login.service.ts @@ -3,13 +3,14 @@ import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs/Observable'; import 'rxjs/add/observable/throw'; import 'rxjs/add/operator/catch'; +import {Router} from '@angular/router'; @Injectable({ providedIn: 'root' }) export class LoginService { - constructor(private http: HttpClient) { } + constructor(private http: HttpClient, private router: Router) { } authorizeUser(loginInfo): Observable { return this.http.post('http://sd5-backend.engr.uconn.edu/auth', loginInfo); @@ -33,19 +34,28 @@ export class LoginService { getToken(): Promise { return new Promise((resolve, reject) => { const token = localStorage.getItem('auth_token'); - if (!token) { reject('No Token'); } - this.http.get('http://sd5-backend.engr.uconn.edu/auth/verify', { + if (!token) { this.resetToken(); reject('No Token'); } + this.http.get('http://sd5-backend.engr.uconn.edu/verify', { headers: { Authorization: 'Bearer ' + token }, observe: 'response' }).subscribe((response) => { - if (response.status === 200) { + if (response.ok) { resolve(token); } else { - reject('Invalid Token'); + this.resetToken(); + reject('Bad Token!'); } + }, () => { + this.resetToken(); + reject('Bad Token!'); }); }); } + + resetToken() { + localStorage.removeItem('auth_token'); + this.router.navigateByUrl('#'); + } } diff --git a/src/app/statistics/statistics.component.css b/src/app/statistics/statistics.component.css index a16be29..10fb03c 100644 --- a/src/app/statistics/statistics.component.css +++ b/src/app/statistics/statistics.component.css @@ -48,4 +48,16 @@ h6 height: 100%; height: 46px; } +radial-gauge:hover { + cursor: pointer; +} +linear-gauge:hover { + cursor: pointer; +} +button +{ + width: 150px; + background-color: orange; + color: white; +} diff --git a/src/app/statistics/statistics.component.html b/src/app/statistics/statistics.component.html index 563bfd1..8dd8657 100644 --- a/src/app/statistics/statistics.component.html +++ b/src/app/statistics/statistics.component.html @@ -1,6 +1,6 @@
- +
diff --git a/src/app/statistics/statistics.component.ts b/src/app/statistics/statistics.component.ts index 0e76c2a..7d9655b 100644 --- a/src/app/statistics/statistics.component.ts +++ b/src/app/statistics/statistics.component.ts @@ -27,7 +27,8 @@ export class StatisticsComponent implements OnInit { public radial_metrics = ['l1.current', 'l2.current', 'l3.current', 'engine.rpm', 'fuel.pressure', 'l1.l0.voltage', 'l2.l0.voltage', 'l3.l0.voltage', 'total.kw']; public slide_metrics = ['coolant.temp', 'fuel.temp', 'oil.temp', 'oil.pressure']; - public timer$; + public datatimer$; + public statetimer$; getMajorTicks(metric: GeneratorMetric) { const total = (metric.max - metric.min); @@ -65,9 +66,6 @@ export class StatisticsComponent implements OnInit { loadData() { const gen_id = parseInt(localStorage.getItem('gen_id'), 10); this.login.getToken().then((jsonToken) => { - this.data2.getGeneratorState(gen_id, jsonToken).then((state) => { - this.generator_state = state; - }); this.data2.getGeneratorStatistics(gen_id, jsonToken).then((statistics) => { this.generator_statistics = statistics; }); @@ -76,6 +74,17 @@ export class StatisticsComponent implements OnInit { }); } + loadState() { + const gen_id = parseInt(localStorage.getItem('gen_id'), 10); + this.login.getToken().then((jsonToken) => { + this.data2.getGeneratorState(gen_id, jsonToken).then((state) => { + this.generator_state = state; + }); + }, (error) => { + // todo go to logout + }); + } + reloadLoop() { } @@ -83,10 +92,14 @@ export class StatisticsComponent implements OnInit { ngOnInit() { localStorage.removeItem('data_type'); localStorage.removeItem('fault_type'); - this.timer$ = timer(0, 60000); - this.timer$.subscribe(() => { + this.datatimer$ = timer(0, 60000); + this.datatimer$.subscribe(() => { this.loadData(); }); + this.statetimer$ = timer(0, 5000); + this.statetimer$.subscribe(() => { + this.loadState(); + }); // this.loadData(); } diff --git a/src/app/visualize-one/visualize-one.component.ts b/src/app/visualize-one/visualize-one.component.ts index 42c3d8d..c683b58 100644 --- a/src/app/visualize-one/visualize-one.component.ts +++ b/src/app/visualize-one/visualize-one.component.ts @@ -218,7 +218,8 @@ export class VisualizeOneComponent implements OnInit { if (this.chart !== null) { this.chart.destroy(); } - this.chart = this.graphData.createChart(labels, data, [localStorage.getItem('gen_name')]); + this.genName$ = localStorage.getItem('gen_name'); + this.chart = this.graphData.createChart(labels, data, [this.genName$]); this.unit$ = this.data.getUnits(dataVal); this.startTime$ = startArray[1] + '/' + startArray[2] + '/' + startArray[0]; this.endTime$ = endArray[1] + '/' + endArray[2] + '/' + endArray[0];