probe.mjs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import fs from 'node:fs';
  2. const BASE = 'http://192.168.110.96:8301/api/cockpit/v1';
  3. const DEVICES = ['21119740','41010500001320000001','41010500001320000002','860347065467627','8652052334','TEST-CBLL222222222','TEST-CBYL5432168','TEST-CNXHS0000001','TEST-TCLLJ002215','TEST_001'];
  4. const OPEN_WO = new Set([0,1,2,3,4,6]);
  5. const OPEN_WARN = new Set(['PENDING','PROCESSING','HANDLING','RELEASED']);
  6. async function get(path, file) {
  7. const res = await fetch(BASE + path);
  8. const text = await res.text();
  9. if (file) fs.writeFileSync(file, text);
  10. return { status: res.status, json: JSON.parse(text) };
  11. }
  12. const rows = [];
  13. for (const c of DEVICES) {
  14. let agg, wo;
  15. try { agg = await get('/equipments/' + encodeURIComponent(c) + '/detail-aggregate', 'agg-' + c + '.json'); } catch (e) { agg = null; }
  16. try { wo = await get('/equipments/' + encodeURIComponent(c) + '/work-orders', 'wo-' + c + '.json'); } catch (e) { wo = null; }
  17. const d = agg && agg.json && agg.json.data ? agg.json.data : {};
  18. const alarms = (d.alarms && d.alarms.data) || [];
  19. const warnings = (d.warnings && d.warnings.data) || [];
  20. const workOrders = (d.workOrders && d.workOrders.data) || [];
  21. const unhandled = alarms.filter(a => a.alarmStatus === 0 || a.alarmStatus === '0' || a.status === 0);
  22. const openWarn = warnings.filter(w => OPEN_WARN.has(String(w.status||'').toUpperCase()));
  23. const openWo = workOrders.filter(o => OPEN_WO.has(Number(o.orderStatus ?? o.stateCode ?? o.status)));
  24. rows.push({ code: c, aggState: d.aggregateState,
  25. alarmsAll: alarms.length, alarmsUnhandled: unhandled.length,
  26. alarmStatusSample: alarms.slice(0,3).map(a=>({alarmStatus:a.alarmStatus, workOrderId:a.workOrderId, code:a.alarmNo||a.alarmCode})),
  27. warningsAll: warnings.length, warningsOpen: openWarn.length, warningStatuses: [...new Set(warnings.map(w=>w.status))],
  28. woInAggregate: workOrders.length, woOpen: openWo.length,
  29. woStatuses: workOrders.map(o=>({id:o.workOrderId||o.orderId, s:o.orderStatus??o.stateCode??o.status})),
  30. woEndpointCount: wo && wo.json && wo.json.data ? ((wo.json.data.list||wo.json.data.records||wo.json.data).length ?? null) : null,
  31. woEndpointData: wo && wo.json ? JSON.stringify(wo.json.data).slice(0,200) : null,
  32. });
  33. }
  34. fs.writeFileSync('device-facts.json', JSON.stringify(rows,null,1));
  35. for (const r of rows) console.log(JSON.stringify(r));