├── assets ├── .gitkeep ├── map.png ├── upload.png ├── battery.png ├── pipeline.png ├── prediction.png └── architecture.png ├── source ├── .gitkeep ├── deploy │ ├── assets │ │ ├── .gitkeep │ │ ├── battery-locations.csv │ │ └── connected-batteries.json │ ├── cdk.json │ ├── tsconfig.json │ ├── src │ │ ├── config │ │ │ ├── index.ts │ │ │ └── git-context.ts │ │ ├── constructs │ │ │ ├── CONSTRUCT.template │ │ │ ├── map-construct.ts │ │ │ ├── ddb-table-construct.ts │ │ │ ├── wafv2-attachments.ts │ │ │ ├── lambda-function-construct.ts │ │ │ ├── apigatewayv2-lambda-construct.ts │ │ │ ├── schema.graphql │ │ │ ├── ssm-parameter-reader-construct.ts │ │ │ ├── wafv2-basic-construct.ts │ │ │ ├── eventbridge-lambda-contruct.ts │ │ │ └── s3-library-construct.ts │ │ ├── cf-waf-stack.ts │ │ ├── cdk-nag-suppressions.ts │ │ └── app.ts │ ├── build.py │ └── package.json ├── web-app │ ├── src │ │ ├── assets │ │ │ ├── .gitkeep │ │ │ ├── icons │ │ │ │ ├── car.png │ │ │ │ ├── popin.png │ │ │ │ ├── popout.png │ │ │ │ ├── power.png │ │ │ │ ├── battery.png │ │ │ │ ├── capacity.png │ │ │ │ ├── current.png │ │ │ │ ├── impedance.png │ │ │ │ ├── voltage.png │ │ │ │ ├── battery-alt.png │ │ │ │ ├── temperature.png │ │ │ │ ├── charging-time.png │ │ │ │ ├── empty-battery.png │ │ │ │ ├── steering-wheel.png │ │ │ │ └── battery-charging.png │ │ │ ├── images │ │ │ │ ├── car.png │ │ │ │ ├── doc.png │ │ │ │ ├── charging.png │ │ │ │ ├── launch.png │ │ │ │ ├── persona.png │ │ │ │ ├── pipeline.png │ │ │ │ ├── upload.png │ │ │ │ ├── back-arrow.png │ │ │ │ ├── error-step.png │ │ │ │ ├── need-charging.png │ │ │ │ ├── not-charging.png │ │ │ │ ├── tracker-step1.png │ │ │ │ ├── tracker-step2.png │ │ │ │ ├── tracker-step3.png │ │ │ │ ├── tracker-step4.png │ │ │ │ ├── tracker-step5.png │ │ │ │ ├── tracker-step6.png │ │ │ │ ├── tracker-step7.png │ │ │ │ ├── completed-step.png │ │ │ │ ├── inprogress-step.png │ │ │ │ ├── notstarted-step.png │ │ │ │ ├── battery-charging.png │ │ │ │ ├── inprogress-half-step.png │ │ │ │ ├── inprogress-step-alt.png │ │ │ │ ├── tracker-disabled-step2.png │ │ │ │ ├── tracker-disabled-step3.png │ │ │ │ ├── tracker-disabled-step4.png │ │ │ │ ├── tracker-disabled-step5.png │ │ │ │ ├── tracker-disabled-step6.png │ │ │ │ └── tracker-disabled-step7.png │ │ │ ├── logos │ │ │ │ └── logo.png │ │ │ └── fonts │ │ │ │ ├── AmazonEmber_Bd.ttf │ │ │ │ ├── AmazonEmberMono_Bd.ttf │ │ │ │ ├── AmazonEmberDisplay_Bd.ttf │ │ │ │ ├── AmazonEmberDisplay_Rg.ttf │ │ │ │ ├── AmazonEmberDisplay_BdIt.ttf │ │ │ │ └── AmazonEmberDisplay_RgIt.ttf │ │ ├── app │ │ │ ├── app.component.html │ │ │ ├── app.component.scss │ │ │ ├── modules │ │ │ │ └── shared │ │ │ │ │ ├── components │ │ │ │ │ ├── breadcrumb │ │ │ │ │ │ ├── breadcrumb.component.html │ │ │ │ │ │ ├── breadcrumb.component.scss │ │ │ │ │ │ └── breadcrumb.component.ts │ │ │ │ │ ├── footer │ │ │ │ │ │ ├── footer.component.html │ │ │ │ │ │ ├── footer.component.scss │ │ │ │ │ │ └── footer.component.ts │ │ │ │ │ ├── spinner │ │ │ │ │ │ ├── spinner.component.html │ │ │ │ │ │ ├── spinner.component.ts │ │ │ │ │ │ └── spinner.component.scss │ │ │ │ │ └── header │ │ │ │ │ │ ├── header.component.html │ │ │ │ │ │ ├── header.component.scss │ │ │ │ │ │ └── header.component.ts │ │ │ │ │ └── shared.module.ts │ │ │ ├── components │ │ │ │ ├── login │ │ │ │ │ ├── login.component.scss │ │ │ │ │ ├── login.component.html │ │ │ │ │ └── login.component.ts │ │ │ │ ├── pipeline │ │ │ │ │ ├── components │ │ │ │ │ │ ├── tabs │ │ │ │ │ │ │ ├── tabs.component.html │ │ │ │ │ │ │ ├── tabs.component.scss │ │ │ │ │ │ │ └── tabs.component.ts │ │ │ │ │ │ ├── dataset-selection │ │ │ │ │ │ │ ├── dataset-selection.component.html │ │ │ │ │ │ │ └── dataset-selection.component.ts │ │ │ │ │ │ └── plugin-selection │ │ │ │ │ │ │ ├── plugin-selection.component.html │ │ │ │ │ │ │ └── plugin-selection.component.ts │ │ │ │ │ └── pipeline.component.html │ │ │ │ ├── dashboard │ │ │ │ │ └── components │ │ │ │ │ │ ├── battery-charge │ │ │ │ │ │ ├── battery-charge.component.html │ │ │ │ │ │ ├── battery-charge.component.scss │ │ │ │ │ │ └── battery-charge.component.ts │ │ │ │ │ │ └── indicator │ │ │ │ │ │ ├── indicator.component.html │ │ │ │ │ │ ├── indicator.component.ts │ │ │ │ │ │ └── indicator.component.scss │ │ │ │ ├── map │ │ │ │ │ ├── map.component.html │ │ │ │ │ ├── map.component.scss │ │ │ │ │ └── map.component.ts │ │ │ │ ├── tracker │ │ │ │ │ ├── tracker.component.html │ │ │ │ │ └── tracker.component.scss │ │ │ │ └── history │ │ │ │ │ ├── history.component.scss │ │ │ │ │ └── history.component.html │ │ │ ├── models │ │ │ │ ├── user-persona.ts │ │ │ │ └── pipeline-status.ts │ │ │ ├── services │ │ │ │ ├── user-preference.service.ts │ │ │ │ ├── config.service.ts │ │ │ │ ├── auth.service.ts │ │ │ │ └── data.service.ts │ │ │ ├── interceptor │ │ │ │ └── auth.interceptor.ts │ │ │ ├── guards │ │ │ │ ├── persona.guard.ts │ │ │ │ └── auth.guard.ts │ │ │ ├── app.component.ts │ │ │ └── app-routing.module.ts │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── graphql │ │ │ ├── subscriptions.graphql │ │ │ ├── mutations.graphql │ │ │ └── queries.graphql │ │ ├── environments │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── main.ts │ │ ├── test.ts │ │ └── polyfills.ts │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ ├── .eslintrc.js │ ├── custom-webpack.config.ts │ ├── tsconfig.json │ ├── build.py │ ├── README.md │ ├── karma.conf.js │ ├── package.json │ └── angular.json ├── tsconfig.json ├── package.json ├── api │ ├── package.json │ ├── build.py │ └── lib │ │ ├── locationDataFn.ts │ │ ├── initPipelineFn.ts │ │ ├── closePipelineFn.ts │ │ ├── cleanExportsFn.ts │ │ ├── trainModelFn.ts │ │ ├── processDataFn.ts │ │ └── exportPredsFn.ts └── build.py ├── deployment └── .gitkeep ├── CODEOWNERS ├── CODE_OF_CONDUCT.md ├── .github ├── solutionid_validator.sh └── workflows │ └── maintainer_workflows.yml ├── .gitignore ├── LICENSE └── CONTRIBUTING.md /assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /source/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /deployment/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /source/deploy/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /source/web-app/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /source/web-app/src/app/app.component.html: -------------------------------------------------------------------------------- 1 |
${changes["displayText"].currentValue}
`; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /source/deploy/src/constructs/map-construct.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2022 Amazon.com, Inc. and its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Amazon Software License (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/asl/ 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | import * as cdk from "aws-cdk-lib"; 17 | import { Construct } from "constructs"; 18 | 19 | const map = cdk.aws_location; 20 | 21 | export class MapConstruct extends Construct { 22 | public cfnMap: cdk.aws_location.CfnMap; 23 | 24 | constructor(parent: Construct, name: string, props: any) { 25 | super(parent, name); 26 | 27 | const stack = cdk.Stack.of(this); 28 | const ts = new Date().getTime(); 29 | this.cfnMap = new map.CfnMap(this, name, { 30 | mapName: `${stack}-battery-location-map-${ts}`, 31 | configuration: { 32 | style: "VectorEsriNavigation", 33 | }, 34 | description: "Locations of each battery", 35 | pricingPlan: "RequestBasedUsage", 36 | }); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /source/deploy/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cdk", 3 | "version": "0.0.1", 4 | "scripts": { 5 | "build": "tsc", 6 | "watch": "tsc -w", 7 | "test": "jest", 8 | "cdk": "cdk", 9 | "bootstrap": "cdk bootstrap --cloudformation-execution-policies 'arn:aws:iam::aws:policy/PowerUserAccess,arn:aws:iam::aws:policy/IAMFullAccess'", 10 | "lint": "eslint src/" 11 | }, 12 | "devDependencies": { 13 | "@aws-cdk/aws-apigatewayv2-alpha": "^2.63.2-alpha.0", 14 | "@aws-cdk/aws-apigatewayv2-authorizers-alpha": "^2.63.2-alpha.0", 15 | "@aws-cdk/aws-apigatewayv2-integrations-alpha": "^2.63.2-alpha.0", 16 | "@aws-cdk/aws-lambda-python-alpha": "^2.63.2-alpha.0", 17 | "@types/git-branch": "^2.0.4", 18 | "@types/git-repo-name": "^1.0.3", 19 | "@types/jest": "^27.5.2", 20 | "@types/node": "^16.18.60", 21 | "@typescript-eslint/eslint-plugin": "5.22.0", 22 | "@typescript-eslint/parser": "5.22.0", 23 | "aws-cdk": "^2.103.1", 24 | "aws-cdk-lib": "^2.103.1", 25 | "aws-sdk": "^2.1486.0", 26 | "cdk-nag": "^2.27.179", 27 | "constructs": "^10.3.0", 28 | "eslint": "^8.52.0", 29 | "eslint-config-prettier": "8.5.0", 30 | "eslint-plugin-prettier": "4.0.0", 31 | "git-branch": "^2.0.1", 32 | "git-repo-name": "^1.0.1", 33 | "jest": "^27.5.1", 34 | "source-map-support": "^0.5.21", 35 | "ts-node": "^10.9.1", 36 | "typescript": "^4.9.5" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /source/web-app/src/app/modules/shared/components/breadcrumb/breadcrumb.component.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2022 Amazon.com, Inc. and its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Amazon Software License (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/asl/ 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | import {Component, Input} from '@angular/core'; 17 | import {Router} from "@angular/router"; 18 | 19 | type ClickHandler = () => void; 20 | 21 | @Component({ 22 | selector: 'app-breadcrumb', 23 | templateUrl: './breadcrumb.component.html', 24 | styleUrls: ['./breadcrumb.component.scss'] 25 | }) 26 | export class BreadcrumbComponent { 27 | 28 | @Input() text: string | undefined; 29 | @Input() route: any; 30 | @Input() clickHandler: ClickHandler | undefined 31 | constructor(private router: Router) { } 32 | 33 | navigate() { 34 | if (this.route) { 35 | this.router.navigateByUrl(this.route).then(); 36 | } else if (this.clickHandler) { 37 | this.clickHandler(); 38 | } 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /source/web-app/src/test.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2022 Amazon.com, Inc. and its affiliates. All Rights Reserved. 3 | * 4 | * Licensed under the Amazon Software License (the "License"). 5 | * You may not use this file except in compliance with the License. 6 | * A copy of the License is located at 7 | * 8 | * http://aws.amazon.com/asl/ 9 | * 10 | * or in the "license" file accompanying this file. This file is distributed 11 | * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 | * express or implied. See the License for the specific language governing 13 | * permissions and limitations under the License. 14 | */ 15 | 16 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 17 | 18 | import 'zone.js/testing'; 19 | import { getTestBed } from '@angular/core/testing'; 20 | import { 21 | BrowserDynamicTestingModule, 22 | platformBrowserDynamicTesting 23 | } from '@angular/platform-browser-dynamic/testing'; 24 | 25 | declare const require: { 26 | context(path: string, deep?: boolean, filter?: RegExp): { 27 |
6 |
6 |
52 | | Date Created | 12 |Dataset File Name | 13 |Plugin Name | 14 |Status | 15 ||
|---|---|---|---|---|
| No pipeline available | 20 |||||
| {{pipeline.DataUploadedAt | date: 'medium' : 'GMT'}} | 23 |{{pipeline.OriginalDatasetName}} | 24 |{{pipeline.OriginalPluginName}} | 25 |
26 |
27 |
36 |
29 |
34 |
30 |
31 |
32 | |
37 | |
| 40 | | ||||
| 45 | |
46 |
47 | Items per page:
48 |
49 |
63 | |
64 | |||