{"version":3,"file":"atroposs-sql-module.mjs","sources":["../../../projects/atroposs-sql-module/src/lib/atroposs-sql-module.service.ts","../../../projects/atroposs-sql-module/src/lib/components/main/main.component.ts","../../../projects/atroposs-sql-module/src/lib/components/main/main.component.html","../../../projects/atroposs-sql-module/src/lib/atroposs-sql-module.component.ts","../../../projects/atroposs-sql-module/src/lib/components/dashboard/table-filter.pipe.ts","../../../projects/atroposs-sql-module/src/lib/components/dashboard/dashboard.component.ts","../../../projects/atroposs-sql-module/src/lib/components/dashboard/dashboard.component.html","../../../projects/atroposs-sql-module/src/lib/components/details/details.component.ts","../../../projects/atroposs-sql-module/src/lib/components/details/details.component.html","../../../projects/atroposs-sql-module/src/lib/app-routing.module.ts","../../../projects/atroposs-sql-module/src/lib/atroposs-sql-module.module.ts","../../../projects/atroposs-sql-module/src/public-api.ts","../../../projects/atroposs-sql-module/src/atroposs-sql-module.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { StructuredJson } from './interfaces/sqlinstance';\r\nimport { PersonDays } from './interfaces/summarydata';\r\nimport { SummaryData } from './interfaces/summarydata';\r\nimport { subObject } from './interfaces/sqlinstance';\r\nimport { TableRow } from './interfaces/sqlinstance';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AtropossSqlModuleService {\r\n  public csvResults: string = '';\r\n  public uploaded: boolean = false;\r\n  public allData: any;\r\n  public summaryData: SummaryData = {} as SummaryData;\r\n  public tableData: TableRow[] = [];\r\n  public personDays: PersonDays = {} as PersonDays;\r\n  constructor() {}\r\n\r\n  convertJSONtoCSV(json: StructuredJson | subObject) {\r\n    var csv = '';\r\n    length = Object.keys(json).length;\r\n    let keys = Object.keys(json);\r\n    let values = Object.values(json);\r\n    for (let i = 0; i < values.length; i++) {\r\n      if (typeof values[i] === 'object') {\r\n        let newObj: subObject = this.flattenHelper(values[i], keys[i]);\r\n        csv += this.convertJSONtoCSV(newObj);\r\n      } else {\r\n        csv += values[i] + ',';\r\n      }\r\n    }\r\n    return csv;\r\n  }\r\n\r\n  flattenHelper(currentObject: subObject, parentKey: string) {\r\n    let flattenedObject: any = {};\r\n    let values = Object.values(currentObject);\r\n    let oldKeys = Object.keys(currentObject);\r\n    let newKeys: string[] = [];\r\n    for (let i = 0; i < oldKeys.length; i++) {\r\n      newKeys.push(parentKey + '-' + oldKeys[i]);\r\n    }\r\n    for (let i = 0; i < values.length; i++) {\r\n      if (typeof values[i] === 'object') {\r\n        flattenedObject = {\r\n          ...flattenedObject,\r\n          ...this.flattenHelper(values[i], newKeys[i]),\r\n        };\r\n      } else {\r\n        flattenedObject[newKeys[i]] = values[i];\r\n      }\r\n    }\r\n\r\n    return flattenedObject;\r\n  }\r\n\r\n  async uploadFiles(event: Event) {\r\n    //@ts-ignore\r\n    let fileList = event.target.files;\r\n    // const file: File = event.target.files[0];\r\n    const context: { fileNames: string[]; fileTexts: string[] } = {\r\n      fileNames: [],\r\n      fileTexts: [],\r\n    };\r\n    //let fileList: any = event.target.files;\r\n    for (var i = 0; i < fileList.length; i++) {\r\n      let file = fileList.item(i);\r\n      let fileName = file.name;\r\n      let fileText = await file.text();\r\n      fileText = fileText.replace('\\\\', '/');\r\n      context.fileNames.push(fileName);\r\n      context.fileTexts.push(JSON.parse(fileText));\r\n    }\r\n\r\n    // Calculates Global Complexity\r\n    context.fileTexts.forEach((element: any) => {\r\n      console.log(this);\r\n      let formattedElement: StructuredJson = { ...element };\r\n      let globalComplexity = this.summaryData\r\n        ? this.summaryData.globalComplexity\r\n        : 0;\r\n      globalComplexity\r\n        ? (globalComplexity +=\r\n            this.calculateMigrationComplexity(formattedElement))\r\n        : (globalComplexity =\r\n            this.calculateMigrationComplexity(formattedElement));\r\n      this.summaryData!.globalComplexity = globalComplexity;\r\n    });\r\n    this.summaryData!.globalComplexity =\r\n      this.summaryData!.globalComplexity / context.fileTexts.length;\r\n\r\n    // Used to Hide the Upload Location\r\n    this.uploaded = true;\r\n\r\n    // Parse JSON from String\r\n    let keysList: string[] = [];\r\n\r\n    // Get all the keys from the JSON for CSV.\r\n    let headerObject: StructuredJson = {\r\n      ...(typeof context.fileTexts[0] === 'object'\r\n        ? context.fileTexts[0]\r\n        : JSON.parse(context.fileTexts[0])),\r\n    };\r\n    for (let element in headerObject) {\r\n      if (typeof headerObject[element as keyof StructuredJson] === 'object') {\r\n        let tempObj: any = headerObject[element as keyof StructuredJson];\r\n        let flattenedObject = this.flattenHelper(tempObj, element);\r\n        for (let key in flattenedObject) {\r\n          keysList.push(key);\r\n        }\r\n      } else {\r\n        keysList.push(element);\r\n      }\r\n    }\r\n\r\n    this.summaryData!.assetInstances = context.fileTexts.length;\r\n\r\n    // Calculate Migration Complexity\r\n    this.summaryData!.personDays = this.calculatePersonDays(\r\n      this.summaryData!.globalComplexity,\r\n      this.summaryData!.assetInstances\r\n    );\r\n    // Calculate Costs per Type\r\n    this.summaryData!.costsTotal = this.calculateCostsPerType(\r\n      this.summaryData!.personDays\r\n    );\r\n\r\n    // First Line CSV\r\n    for (let key of keysList) {\r\n      this.csvResults += key + ',';\r\n    }\r\n    // Line break from header to first row\r\n    this.csvResults += '\\n';\r\n    // For each file, add the rows to the csv\r\n    context.fileTexts.forEach((element) => {\r\n      if (typeof element === 'object') {\r\n        this.csvResults += this.convertJSONtoCSV(element);\r\n      } else {\r\n        this.csvResults += this.convertJSONtoCSV(JSON.parse(element));\r\n      }\r\n      this.csvResults += '\\n';\r\n    });\r\n\r\n    this.allData = context.fileTexts;\r\n    if (this.csvResults != '') {\r\n      // Automatic Download\r\n      const hiddenElement = document.createElement('a');\r\n      hiddenElement.href =\r\n        'data:attachment/text,' + encodeURIComponent(this.csvResults);\r\n      hiddenElement.target = '_blank';\r\n      hiddenElement.download = 'myFile.csv';\r\n      hiddenElement.click();\r\n    }\r\n    return true;\r\n  }\r\n  catch(e: any) {\r\n    console.log(e);\r\n    return false;\r\n  }\r\n\r\n  downloadFilesFromDirectory() {\r\n    let a = document.createElement('a');\r\n    a.download = 'Input-Server-List.txt';\r\n    a.href = 'assets/Input-Server-List.txt';\r\n    console.log(a);\r\n    a.click();\r\n\r\n    let b = document.createElement('a');\r\n    b.download = 'get_MSSQL_info.psm1';\r\n    b.href = 'assets/get_MSSQL_info.psm1';\r\n    console.log(b);\r\n    b.click();\r\n  }\r\n\r\n  clearItemsForReupload() {\r\n    sessionStorage.clear();\r\n    this.uploaded = false;\r\n    this.summaryData = {\r\n      assetInstances: 0,\r\n      globalComplexity: 0!,\r\n      costsTotal: {\r\n        AzureVM: 0,\r\n        AzureSQLInstance: 0,\r\n        AzureSQLDb: 0,\r\n      },\r\n      personDays: {\r\n        AzureVM: 0,\r\n        AzureSQLInstance: 0,\r\n        AzureSQLDb: 0,\r\n      },\r\n    };\r\n    // this does not work (at least automatic re-upload doesn't), so I go back to module start page\r\n    // location.reload();\r\n    location.replace('sql-module');\r\n  }\r\n\r\n  appendMoreFiles() {\r\n    this.uploaded = false;\r\n  }\r\n\r\n  csv2json(csv: string) {\r\n    //char to separate the csv values\r\n    const SPLIT_CHAR: string = ',';\r\n\r\n    let contacts: Array<any> = [];\r\n    let properties: any = '';\r\n    let flag: boolean = false;\r\n    //Flag is for extracting first line\r\n    flag = false;\r\n    // Main Data\r\n    let objarray: Array<any> = [];\r\n    //Properties\r\n    let prop: Array<any> = [];\r\n    //Total Length\r\n    let size: any = 0;\r\n\r\n    for (const line of csv.split(/[\\r\\n]+/)) {\r\n      size = line.split(SPLIT_CHAR).length;\r\n      if (flag) {\r\n        let obj: any = {};\r\n        for (let k = 0; k < size - 1; k++) {\r\n          //Dynamic Object Properties\r\n          obj[prop[k]] = line.split(SPLIT_CHAR)[k];\r\n        }\r\n        objarray.push(obj);\r\n      } else {\r\n        //First Line of CSV will be having Properties\r\n        for (let k = 0; k < size - 1; k++) {\r\n          //Removing all the spaces to make them usefull\r\n          if (line.split(SPLIT_CHAR)[k].replace(/ /g, '') == 'Classification') {\r\n            prop.push(\r\n              prop[k - 1] + line.split(SPLIT_CHAR)[k].replace(/ /g, '')\r\n            );\r\n          } else {\r\n            prop.push(line.split(SPLIT_CHAR)[k].replace(/ /g, ''));\r\n          }\r\n        }\r\n        flag = true;\r\n      }\r\n    }\r\n    contacts = objarray;\r\n    properties = [];\r\n\r\n    properties = prop;\r\n    flag = true;\r\n\r\n    return contacts;\r\n  }\r\n\r\n  /**\r\n   * @name calculateMigrationComplexityInstance\r\n   * @description json as string, parse json calculate the migration complexity, return for instance\r\n   * @param json File\r\n   */\r\n  calculateMigrationComplexity(json: StructuredJson) {\r\n    let valueA: number = 1;\r\n    let valueB: number = 2;\r\n    let valueC: number = 3;\r\n    let Divisor: number = 7;\r\n    let values = Object.values(json);\r\n    let complexity: number = 0;\r\n    values.forEach((item) => {\r\n      if (item.hasOwnProperty('Classification')) {\r\n        switch (item.Classification) {\r\n          case 'A':\r\n            complexity += valueA;\r\n            break;\r\n          case 'B':\r\n            complexity += valueB;\r\n            break;\r\n          case 'C':\r\n            complexity += valueC;\r\n            break;\r\n          default:\r\n            break;\r\n        }\r\n      }\r\n    });\r\n    console.log(complexity / Divisor);\r\n    return complexity / Divisor;\r\n  }\r\n\r\n  /**\r\n   * @name calculatePersonDays\r\n   * @description Calculate person days for global\r\n   * @param totalComplexity\r\n   * @param assetInstances number of assets\r\n   */\r\n  calculatePersonDays(totalComplexity: number, assetInstances: number) {\r\n    let AzureVM: number = 3;\r\n    let AzureSQLInstance: number = 3.5;\r\n    let AzureSQLDb: number = 5;\r\n    let personDays = { AzureVM: 0, AzureSQLInstance: 0, AzureSQLDb: 0 };\r\n\r\n    personDays.AzureVM = parseFloat(\r\n      (AzureVM * totalComplexity * assetInstances).toFixed(2)\r\n    );\r\n    personDays.AzureSQLInstance = parseFloat(\r\n      (AzureSQLInstance * totalComplexity * assetInstances).toFixed(2)\r\n    );\r\n    personDays.AzureSQLDb = parseFloat(\r\n      (AzureSQLDb * totalComplexity * assetInstances).toFixed(2)\r\n    );\r\n\r\n    return personDays;\r\n  }\r\n\r\n  calculateCostsPerType(personDaysObject: PersonDays) {\r\n    let Cost: PersonDays = { AzureVM: 0, AzureSQLInstance: 0, AzureSQLDb: 0 };\r\n    let costFactor: number = 1.1;\r\n    for (let key in personDaysObject) {\r\n      Cost[key as keyof typeof Cost] =\r\n        personDaysObject[key as keyof typeof personDaysObject] * costFactor;\r\n    }\r\n    return Cost;\r\n  }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { AtropossSqlModuleService } from '../../atroposs-sql-module.service';\r\nimport { Router, ActivatedRoute } from '@angular/router'; // CLI imports router\r\n\r\n@Component({\r\n  selector: 'main',\r\n  templateUrl: './main.component.html',\r\n  styleUrls: ['./main.component.scss'],\r\n})\r\nexport class MainComponent implements OnInit {\r\n  public error: Error | undefined;\r\n  constructor(\r\n    public calcService: AtropossSqlModuleService,\r\n    private router: Router,\r\n    private route: ActivatedRoute\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    //   if(sessionStorage['alldata'] && sessionStorage['summarydata']) {\r\n    //     this.HelpFunct.allData = JSON.parse(sessionStorage['alldata']);\r\n    //     this.HelpFunct.summaryData = JSON.parse(sessionStorage['summarydata']);\r\n    //     this.HelpFunct.uploaded = true;\r\n    //   }\r\n  }\r\n\r\n  uploadFiles = async (files: Event) => {\r\n    let response = await this.calcService.uploadFiles(files);\r\n    if (response) {\r\n      // navigate to dashboard\r\n      this.router.navigate(['dashboard'], { relativeTo: this.route });\r\n    } else {\r\n      this.error = new Error('Error uploading files');\r\n    }\r\n  };\r\n}\r\n","<div class=\"parent-container\">\r\n  <div class=\"container\">\r\n    <div class=\"download-upload-container\">\r\n      <div class=\"download inner\">\r\n        <h1>Download Powershell</h1>\r\n        <div class=\"description-text\">\r\n          <p style=\"text-align: left\">\r\n            The SQL Server Assessment solution is built using\r\n            cutting-edge-technologies WebAssembly(WASM), JavaScript and Python.\r\n            Click to learn more. As ATROPOSS runs in a modern browser, there is\r\n            no software or additional library installation needed. Since\r\n            ATROPOSS runs on the local browser, the platform won’t have access\r\n            to user data.\r\n          </p>\r\n\r\n          <details>\r\n            <summary style=\"font-size: 1.1rem\">How it works?</summary>\r\n            <div>\r\n              <h4 style=\"margin: 0.5rem 0 0 0\">\r\n                <u>Download PowerShell Module</u>\r\n              </h4>\r\n              Please download the PowerShell module and the corresponding\r\n              INPUT-Server-List file using the button below.\r\n\r\n              <h4 style=\"margin: 1rem 0 0 0; padding: 0; line-height: normal\">\r\n                <u style=\"margin-top: 1rem\"\r\n                  >Preparing for the Powershell Script</u\r\n                >\r\n              </h4>\r\n              <ol>\r\n                <li>\r\n                  Choose a Jumphost/Server, which has connectivity to all\r\n                  required SQL Server\r\n                </li>\r\n                <li>\r\n                  Paste <b>both</b> files (PowerShell Modules\r\n                  <i>ATROPOSS_get_MSSQL_info.psm1</i> <b>and</b>\r\n                  <i> Input-Server-List.txt </i>)\r\n                </li>\r\n                <li>\r\n                  In the next step, enter all required SQL Server instances in\r\n                  the input file Input-Server-List.txt, separated by line\r\n                  break.Following formats of destination SQL Server instances\r\n                  are supported:\r\n                  <ol style=\"list-style-type: lower-roman\">\r\n                    <li>SERVERNAME\\INSTANCE</li>\r\n                    <li>SERVERNAME.DOMAIN\\INSTANCE (FQDN)</li>\r\n                  </ol>\r\n                </li>\r\n              </ol>\r\n              <h4 style=\"margin: 1rem 0 0 0; padding: 0; line-height: normal\">\r\n                <u style=\"margin-top: 1rem\">Using the Powershell Script</u>\r\n              </h4>\r\n              <ol>\r\n                <li>\r\n                  Start PowerShell and switch to the directory, where both files\r\n                  are located\r\n                </li>\r\n                <li>\r\n                  Import PowerShell module:\r\n                  <ol>\r\n                    <li style=\"list-style-type: lower-alpha\">\r\n                      <i>Windows Authentication</i> (for all sever instances in\r\n                      the input file)\r\n\r\n                      <p>\r\n                        <code\r\n                          >Import-Module .\\ATROPOSS_get_MSSQL_info.psm1</code\r\n                        >\r\n                      </p>\r\n                    </li>\r\n                    <br />\r\n                    <li style=\"list-style-type: lower-alpha\">\r\n                      <i>SQL Authentication</i> (for all sever instances in the\r\n                      input file)\r\n                      <p>\r\n                        <code\r\n                          >Import-Module .\\ATROPOSS_get_MSSQL_info.psm1</code\r\n                        >\r\n                      </p>\r\n                      <span\r\n                        ><i\r\n                          >Please enter the sql user name after the\r\n                          “-credential” parameter</i\r\n                        ></span\r\n                      >\r\n                    </li>\r\n                  </ol>\r\n                </li>\r\n              </ol>\r\n              <h4 style=\"margin: 1rem 0 0 0; padding: 0; line-height: normal\">\r\n                <u>Output</u>\r\n              </h4>\r\n\r\n              <p>\r\n                The result is a JSON file for each SQL-Server instance. From\r\n                here you can upload them to the SQL assessment on the right to\r\n                get your Atroposs SQL Assessment.\r\n              </p>\r\n            </div>\r\n          </details>\r\n          <div style=\"margin: 1rem 0 0 0\">\r\n            <u>Feedback</u> <br />\r\n            If you have any improvements for the module, feel free to contact us\r\n            or much better please contribute to enhance the module. Thanks in\r\n            advance for your interest and we hope to hear from you.\r\n          </div>\r\n        </div>\r\n\r\n        <button\r\n          type=\"button\"\r\n          class=\"custom-file-upload\"\r\n          color=\"primary\"\r\n          id=\"download\"\r\n          (click)=\"calcService.downloadFilesFromDirectory()\"\r\n        >\r\n          Download\r\n        </button>\r\n      </div>\r\n      <div class=\"upload inner\">\r\n        <h1>SQL Assessment</h1>\r\n        <p>\r\n          Upload your data from the output of the powershell. The application\r\n          will create a lightweight dashboard of the results and calculate for\r\n          you some cost associated metrics for transitioning\r\n        </p>\r\n        <form method=\"POST\" enctype=\"multipart/form-data\">\r\n          <label for=\"upload\" class=\"custom-file-upload\">Upload file</label>\r\n          <input\r\n            class=\"mat-flat-button\"\r\n            color=\"primary\"\r\n            type=\"file\"\r\n            id=\"upload\"\r\n            name=\"file\"\r\n            multiple\r\n            (change)=\"this.uploadFiles($event)\"\r\n          />\r\n        </form>\r\n      </div>\r\n      <div id=\"loading\" class=\"loader\"></div>\r\n      <div id=\"Downloaded\" class=\"Downloaded\"></div>\r\n    </div>\r\n  </div>\r\n  <div class=\"logo\">\r\n    <img src=\"assets/orange-network-logo.png\" alt=\"Orange Network logo\" />\r\n  </div>\r\n</div>\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'atroposs-sql-module',\r\n  template: `<main></main>`,\r\n  styleUrls: ['./atroposs-sql-module.component.scss'],\r\n})\r\nexport class AtropossSqlModuleComponent implements OnInit {\r\n  constructor() {}\r\n  \r\n\r\n  ngOnInit() {}\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { TableRow } from '../../interfaces/sqlinstance';\r\n\r\n@Pipe({\r\n  name: 'tableFilter'\r\n})\r\nexport class TableFilterPipe implements PipeTransform {\r\n\r\n  transform(list: TableRow[], value: string) {\r\n  \r\n\r\n      return value ? list.filter(item => item.sqlserverinstance.includes(value)) : list;\r\n  }\r\n\r\n}","import { Component, Input, OnInit } from '@angular/core';\r\nimport { StructuredJson, TableRow } from '../../interfaces/sqlinstance';\r\nimport { SummaryData } from '../../interfaces/summarydata';\r\nimport { AtropossSqlModuleService } from '../../atroposs-sql-module.service';\r\nimport { Router, ActivatedRoute } from '@angular/router'; // CLI imports router\r\nimport { Observable } from 'rxjs';\r\nimport { switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n  selector: 'sql-dashboard',\r\n  templateUrl: './dashboard.component.html',\r\n  styleUrls: ['./dashboard.component.scss'],\r\n})\r\nexport class DashboardComponent implements OnInit {\r\n  public _allData: any = '';\r\n  public Name: string = '';\r\n  public tableData: TableRow[] = [];\r\n  public _summaryData: SummaryData = {} as SummaryData;\r\n\r\n  constructor(\r\n    public calcService: AtropossSqlModuleService,\r\n    private router: Router,\r\n    private route: ActivatedRoute\r\n  ) {}\r\n\r\n  @Input() clearItemsForReupload = () => void 0;\r\n\r\n  ngOnInit(): void {\r\n    this._summaryData = this.calcService.summaryData;\r\n    this._allData = this.calcService.allData;\r\n    if (this._allData) {\r\n      this.fillList();\r\n    } else {\r\n      // this.router.navigate(['/']);\r\n    }\r\n  }\r\n\r\n  // Function used to reset the width on Adjustable table.\r\n  remove_style() {\r\n    let all = document.getElementsByTagName('th');\r\n    var i = all.length;\r\n\r\n    while (i--) {\r\n      all[i].removeAttribute('style');\r\n    }\r\n  }\r\n\r\n  fillList() {\r\n    let i = 0;\r\n    this._allData.forEach((element: any) => {\r\n      let structuredElement: StructuredJson = element;\r\n      console.log(element);\r\n      let instanceComplexity: number =\r\n        this.calcService.calculateMigrationComplexity(element);\r\n      let tableRow: TableRow = {\r\n        idx: i,\r\n        sqlserverinstance: structuredElement['SQL Server Instance'],\r\n        complexity: instanceComplexity,\r\n        persondays: this.calcService.calculatePersonDays(instanceComplexity, 1),\r\n      };\r\n      this.tableData.push(tableRow);\r\n      i++;\r\n    });\r\n    console.log(this.tableData);\r\n  }\r\n\r\n  navigateToDetails(item: StructuredJson, row: TableRow): void {\r\n    console.log(item);\r\n    console.log(row);\r\n    this.router.navigate(['details'], {\r\n      relativeTo: this.route,\r\n      state: { instance: { ...item }, calculatedInstanceData: { ...row } },\r\n    });\r\n  }\r\n}\r\n","<div class=\"dashboard-container\">\r\n  <div class=\"dashboard-top\">\r\n    <div class=\"KPI small\">\r\n      <h4 class=\"header\">Asset Count:</h4>\r\n      <p class=\"typetext\">{{ _summaryData.assetInstances }} Assets</p>\r\n    </div>\r\n    <div class=\"KPI small\">\r\n      <h4 class=\"header\">Global Complexity:</h4>\r\n      <p class=\"typetext\">{{ _summaryData.globalComplexity.toFixed(2) }}</p>\r\n    </div>\r\n    <div class=\"KPI\">\r\n      <h4 class=\"header\">Costs Total:</h4>\r\n      <p class=\"personday typetext\">\r\n        SQL Server on Azure VM:{{ _summaryData.costsTotal.AzureVM.toFixed(2) }}\r\n      </p>\r\n      <p class=\"personday typetext\">\r\n        Azure SQL managed instance:\r\n        {{ _summaryData.costsTotal.AzureSQLInstance.toFixed(2) }}\r\n      </p>\r\n      <p class=\"personday typetext\">\r\n        Azure SQL Database :{{ _summaryData.costsTotal.AzureSQLDb.toFixed(2) }}\r\n      </p>\r\n    </div>\r\n    <div class=\"KPI\">\r\n      <h4 class=\"header\">Person Days:</h4>\r\n      <p class=\"personday typetext\">\r\n        SQL Server on Azure VM: {{ _summaryData.personDays.AzureVM.toFixed(2) }}\r\n      </p>\r\n      <p class=\"personday typetext\">\r\n        Azure SQL managed instance:\r\n        {{ _summaryData.personDays.AzureSQLInstance.toFixed(2) }}\r\n      </p>\r\n      <p class=\"personday typetext\">\r\n        Azure SQL Database : {{ _summaryData.personDays.AzureSQLDb }}\r\n      </p>\r\n    </div>\r\n  </div>\r\n  <div class=\"dashboard-bottom\">\r\n    <div class=\"filter-section\">\r\n      <input\r\n        class=\"search-bar\"\r\n        type=\"text\"\r\n        [(ngModel)]=\"Name\"\r\n        title=\"Search Below Table\"\r\n        placeholder=\"Search...\"\r\n      />\r\n      <div class=\"small-upload-container\">\r\n        <!--  > -->\r\n        <div class=\"inner-buttons\">\r\n          <button mat-flat-button (click)=\"calcService.clearItemsForReupload()\">\r\n            Re-Upload Files\r\n          </button>\r\n          <button\r\n            mat-flat-button\r\n            disabled=\"true\"\r\n            (click)=\"calcService.appendMoreFiles()\"\r\n          >\r\n            Add More Files\r\n          </button>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div class=\"table-scroll\">\r\n      <table>\r\n        <thead>\r\n          <th style=\"text-align: center\">Idx</th>\r\n          <th>Name</th>\r\n          <th>Complexity</th>\r\n          <th>Person Days</th>\r\n        </thead>\r\n        <tbody>\r\n          <tr\r\n            *ngFor=\"let row of tableData | tableFilter : Name\"\r\n            (click)=\"navigateToDetails(_allData[row.idx], row)\"\r\n          >\r\n            <td>{{ row.idx }}</td>\r\n            <td>{{ row.sqlserverinstance }}</td>\r\n            <td>{{ row.complexity.toFixed(2) }}</td>\r\n            <td class=\"personDays\">\r\n              <span\r\n                >SQL Server on Azure VM:\r\n                {{ row.persondays.AzureVM.toFixed(2) }}</span\r\n              >\r\n              <span\r\n                >Azure SQL managed instance:\r\n                {{ row.persondays.AzureSQLInstance.toFixed(2) }}</span\r\n              >\r\n              <span>Azure SQL Database : {{ row.persondays.AzureSQLDb }}</span>\r\n            </td>\r\n          </tr>\r\n        </tbody>\r\n      </table>\r\n    </div>\r\n  </div>\r\n  <div class=\"logo\">\r\n    <img src=\"assets/orange-network-logo.png\" alt=\"Orange Network logo\" />\r\n  </div>\r\n</div>\r\n<router-outlet></router-outlet>\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { __createBinding } from 'tslib';\r\nimport { StructuredJson, subObject, TableRow } from '../../interfaces/sqlinstance';\r\nimport { Location } from '@angular/common';\r\n\r\n@Component({\r\n  selector: 'details-dashboard',\r\n  templateUrl: './details.component.html',\r\n  styleUrls: ['./details.component.scss'],\r\n})\r\nexport class DetailsComponent implements OnInit {\r\n  public _instance: StructuredJson = history.state.instance;\r\n  public _calculatedInstanceData: TableRow =\r\n    history.state.calculatedInstanceData;\r\n  constructor(private location: Location) {}\r\n\r\n  ngOnInit() {\r\n    this._instance = history.state.instance;\r\n    this._calculatedInstanceData = history.state.calculatedInstanceData;\r\n    console.log(this._instance);\r\n    console.log(this._calculatedInstanceData);\r\n  }\r\n\r\n  // Function used to reset the width on Adjustable table.\r\n  remove_style() {\r\n    let all = document.getElementsByTagName('th');\r\n    var i = all.length;\r\n\r\n    while (i--) {\r\n      all[i].removeAttribute('style');\r\n    }\r\n  }\r\n\r\n  temporaryShowRowsBorC(item: string | subObject | number) {\r\n    if (typeof item === 'object') {\r\n      if (item.Classification === 'B' || item.Classification === 'C') {\r\n        console.log(item);\r\n        return true;\r\n      }\r\n      else {\r\n        return false;\r\n      }\r\n    } else {\r\n      return false\r\n    }\r\n  }\r\n  temporaryShowRowsC(item: string | subObject | number) {\r\n    if (typeof item === 'object') {\r\n      if (item.Classification === 'C') {\r\n        console.log(item);\r\n        return true;\r\n      }\r\n      else {\r\n        return false;\r\n      }\r\n    } else {\r\n      return false\r\n    }\r\n  }\r\n\r\n  navigateBack(){\r\n    this.location.back();\r\n  }\r\n}\r\n","<div class=\"details-container\">\r\n  <div class=\"back-arrow\" (click)=\"navigateBack()\">Return</div>\r\n  <h2 class=\"instance-header\">{{ _instance[\"SQL Server Instance\"] }}</h2>\r\n  <div class=\"top\">\r\n    <div class=\"left\">\r\n      <div class=\"background\">\r\n        <h3 class=\"header\">Sizing:</h3>\r\n        <p class=\"info text-spacing\">CPU count: {{ _instance.CPU }}</p>\r\n        <p class=\"info text-spacing\">Instance memory: {{ _instance.Memory }}</p>\r\n        <p class=\"info text-spacing\">\r\n          User DB size: {{ _instance[\"DB size\"] }}\r\n        </p>\r\n        <p class=\"info text-spacing\">\r\n          TempDB size: {{ _instance[\"TempDB size\"] }}\r\n        </p>\r\n      </div>\r\n    </div>\r\n    <div class=\"right\">\r\n      <div class=\"background\">\r\n        <h3 class=\"header\">Migration:</h3>\r\n        <p class=\"info text-spacing\">\r\n          Complexity: {{ _calculatedInstanceData.complexity.toFixed(2) }}\r\n        </p>\r\n        <div class=\"migration\">\r\n          <div class=\"inner-left\">\r\n            <p>Person Days:</p>\r\n          </div>\r\n          <div class=\"inner-right\">\r\n            <p class=\"personday typetext\">\r\n              SQL Server on Azure VM:\r\n              {{ _calculatedInstanceData.persondays.AzureVM.toFixed(2) }}\r\n            </p>\r\n            <p class=\"personday typetext\">\r\n              Azure SQL managed instance:\r\n              {{\r\n                _calculatedInstanceData.persondays.AzureSQLInstance.toFixed(2)\r\n              }}\r\n            </p>\r\n            <p class=\"personday typetext\">\r\n              Azure SQL Database :\r\n              {{ _calculatedInstanceData.persondays.AzureSQLDb.toFixed(2) }}\r\n            </p>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  <div class=\"divider-div\"></div>\r\n  <div class=\"bottom\">\r\n    <div class=\"featuresection\">\r\n      <h3 class=\"header\">Not supported features for Azure SQL Database</h3>\r\n      <p class=\"infotext\">\r\n        Backward compatible with: Azure SQL managed instance and SQL-Server on\r\n        Azure VM\r\n      </p>\r\n      <ng-container *ngFor=\"let item of _instance | keyvalue\" class=\"features\">\r\n        <div class=\"featurelist\" *ngIf=\"temporaryShowRowsBorC(item.value)\">\r\n          <div class=\"feature\">{{ item.key }}</div>\r\n        </div>\r\n      </ng-container>\r\n    </div>\r\n    <div class=\"featuresection\">\r\n      <h3 class=\"header\">\r\n        Not supported features for Azure SQL managed instance\r\n      </h3>\r\n      <p class=\"infotext\">Backward compatible with: SQL-Server on Azure VM</p>\r\n\r\n      <ng-container *ngFor=\"let item of _instance | keyvalue\" class=\"features\">\r\n        <div class=\"featurelist\" *ngIf=\"temporaryShowRowsC(item.value)\">\r\n          <div class=\"feature\">{{ item.key }}</div>\r\n        </div>\r\n      </ng-container>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Routes, RouterModule } from '@angular/router'; // CLI imports router\r\nimport { DetailsComponent } from './components/details/details.component';\r\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\r\nimport { MainComponent } from './components/main/main.component';\r\n\r\n/**\r\n * Routing\r\n * Attention: Please do not define a route for the root path ('') or for the path '**'.\r\n */\r\nconst routes: Routes = [\r\n  {\r\n    path: 'sql-module',\r\n    children: [\r\n      { path: '', component: MainComponent },\r\n      {\r\n        path: 'dashboard',\r\n        children: [\r\n          { path: '', component: DashboardComponent },\r\n          { path: 'details', component: DetailsComponent },\r\n        ],\r\n      },\r\n    ],\r\n  },\r\n]; // sets up routes constant where you define your routes\r\n\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [CommonModule, RouterModule.forChild(routes)],\r\n  exports: [RouterModule],\r\n})\r\nexport class AppRoutingModule {}\r\n","import { NgModule } from '@angular/core';\r\nimport { AtropossSqlModuleComponent } from './atroposs-sql-module.component';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { MainComponent } from './components/main/main.component';\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { DetailsComponent } from './components/details/details.component';\r\nimport { TableFilterPipe } from './components/dashboard/table-filter.pipe';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n\r\n@NgModule({\r\n  declarations: [AtropossSqlModuleComponent, DashboardComponent, MainComponent, DetailsComponent, TableFilterPipe],\r\n  imports: [\r\n    HttpClientModule,\r\n    BrowserModule,\r\n    CommonModule,\r\n    FormsModule,\r\n    BrowserAnimationsModule,\r\n    AppRoutingModule, \r\n    MatButtonModule,\r\n  ],\r\n  exports: [AtropossSqlModuleComponent],\r\n})\r\nexport class AtropossSqlModuleModule {}\r\n","/*\r\n * Public API Surface of atroposs-sql-module\r\n */\r\n\r\nexport * from './lib/atroposs-sql-module.service';\r\nexport * from './lib/atroposs-sql-module.component';\r\nexport * from './lib/atroposs-sql-module.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AtropossSqlModuleService","i1.MainComponent","i3","i4","i6.TableFilterPipe","i1"],"mappings":"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"}