Advertisement
Guest User

Untitled

a guest
Oct 4th, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.68 KB | None | 0 0
  1. import * as _ from 'lodash';
  2. import 'reflect-metadata';
  3. import { createConnection } from 'typeorm';
  4. import { Dashboard } from '../../entities/dashboard';
  5. import { Sensor } from '../../entities/sensor';
  6.  
  7. main().then(() => console.log('done'));
  8.  
  9. async function main() {
  10.  
  11. createConnection({
  12. name: 'dev',
  13. type: 'mysql',
  14. host: 'dev.db.n5-nederman.com',
  15. port: 3306,
  16. username: 'dbadmin',
  17. password: 'gUYZ6anpLEF3gksC',
  18. database: 'iot_test',
  19. entities: [
  20. './lib/entities/*.js'
  21. ],
  22. migrations: [
  23. './migration/dev/*.js'
  24. ],
  25. cli: {
  26. migrationsDir: './migration/dev'
  27. }
  28. }).then(async (connection) => {
  29. const dashboardRepository = connection.getRepository(Dashboard);
  30. const sensorRepository = connection.getRepository(Sensor);
  31.  
  32. const dashboards: Dashboard[] = await dashboardRepository.createQueryBuilder('dashboard')
  33. .leftJoinAndSelect('dashboard.plant', 'plant')
  34. .leftJoinAndSelect('dashboard.system', 'system')
  35. // .where('dashboard.dashboardId IN (\'52519425-c793-4405-87a1-0dfbbc507e0d\')')
  36. .getMany();
  37.  
  38. let sensors: Sensor[];
  39. for (const dashboard of dashboards) {
  40. const definition = JSON.parse(dashboard.definition);
  41.  
  42. if (definition.binding && definition.binding.length !== 0) {
  43. sensors = await sensorRepository.createQueryBuilder('sensor')
  44. .leftJoinAndSelect('sensor.metadata', 'metadata')
  45. .where('sensor.sensorId IN (:sensorIds)')
  46. .setParameters({ sensorIds: definition.binding })
  47. .getMany();
  48.  
  49. for (const sensor of sensors) {
  50. if (sensor.metadata && sensor.metadata['label'] !== '') sensor['label'] = sensor.metadata.label;
  51. else sensor['label'] = sensor.name;
  52. }
  53.  
  54. const updatedDefinition = await updateLayout(definition, sensors);
  55. dashboard.definition = JSON.stringify(updatedDefinition);
  56. console.log('dashboard name', dashboard.name);
  57.  
  58. await dashboardRepository.save(dashboard);
  59. }
  60. }
  61. }).catch(error => console.log(error));
  62.  
  63. async function updateLayout(definition: { [key: string]: any }, sensors: Sensor[]): Promise<any> {
  64.  
  65. if (!definition) { return null; }
  66. for (let i = 0; i < _.get(definition, 'children', definition).length; i++) {
  67.  
  68. // / if there are children in the element, check them /;
  69. if (definition.children) {
  70.  
  71. // / if element has other children /;
  72. if (!_.isEmpty(definition.children[i].children)) {
  73. updateLayout(definition.children[i], sensors);
  74. }
  75. }
  76.  
  77. if (definition.children[i]['config']) {
  78. if (definition.children[i]['component'] !== 'multiLineChart') {
  79. if (definition.children[i]['binding'] && definition.children[i]['binding'].sensorId && definition.children[i]['layout']) {
  80. const foundSensor = sensors.find((sensor: Sensor) => sensor.sensorId === definition.children[i]['binding'].sensorId);
  81. if (foundSensor) {
  82. definition.children[i]['layout'].label = foundSensor.label || foundSensor.name;
  83. delete definition.children[i]['layout'].name;
  84. }
  85. }
  86. } else {
  87. if (definition.children[i]['config'].sensors) {
  88. definition.children[i]['config'].sensors.map((multiLineSensor: any) => {
  89. const foundSensor = sensors.find((sensor: Sensor) => sensor.sensorId === multiLineSensor['binding'].sensorId);
  90. if (multiLineSensor.config) {
  91. multiLineSensor.config.label = foundSensor.label || foundSensor.name;
  92. }
  93. });
  94. }
  95. }
  96. }
  97. }
  98. return definition;
  99. }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement