Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // params: results tu eslasticssearch
- processElasticSearchData: async (results, checkGetStatus0 = false) => {
- // lay tat ca cac room: room_id, person_sensor
- let rooms = await Room.findAll({
- attributes: ['room_id', 'person_sensor']
- });
- // khoi tao mang luu tru gia tri log sensor:
- var values = [];
- // object luu tru cac sensor_id voi cac khoang thoi gian kem theo status(1 hoac 0) cua nhung khoang thoi gian do
- let responseData = {};
- var lastData = {};
- // neu co data query tu elastic search
- if (results.length) {
- // chi lay gia tri _source tu data sensor query tu elastic search
- // "_source": {
- // "timestamp": "2019-08-01T10:00:00+07:00",
- // "sensor_class": "enocean_human",
- // "eep": "D5_00_01",
- // "sensor_id": "05006455",
- // "rssi": "",
- // "gw_id": "GCH00478",
- // "gw_status": "",
- // "status": 1,
- // "index": 1,
- // "@timestamp": "2019-08-01T10:00:00+07:00"
- // }
- for(let i = 0; i < results.length; i++) {
- values.push(results[i]._source);
- }
- // tao object group data theo sensor id
- // {
- // sensor_id: [
- // data_1,
- // data_2
- // ]
- // }
- var group = values.reduce(function (r, a) {
- r[a.sensor_id] = r[a.sensor_id] || [];
- r[a.sensor_id].push(a);
- return r;
- }, Object.create(null));
- // khoi tao bien idDevice = gia tri tat ca cac sensor_id query dc
- const idDevices = Object.keys(group);
- // check voi moi sensor id tong hop lai khoang thoi gian co log 1 va 0 va luu vao bien responseData
- // {
- // sensor_id1: [
- // {
- // start_time: a,
- // end_time: b,
- // status: 1
- // },
- // {
- // start_time: c,
- // end_time: d,
- // status: 0
- // },
- // ]
- // }
- for(let i=0; i < idDevices.length; i++){
- const values = group[idDevices[i]];
- let data = [];
- let status = '';
- for(let j=0; j < values.length; j++) {
- const item = values[j];
- if (status !== item.status) {
- let startTime = item.timestamp;
- if (data.length > 0 && typeof data[data.length-1].endTime == "undefined") {
- data[data.length-1].endTime = startTime;
- }
- data.push({startTime, status: item.status});
- }
- status = item.status;
- if (j + 1 < values.length && item.timestamp.substr(0,10) !== values[j + 1].timestamp.substr(0,10)) {
- data[data.length -1].endTime = values[j].timestamp;
- status = '';
- }
- }
- if (data.length > 0){
- data[data.length -1].endTime = values[values.length-1].timestamp;
- }
- let idDevice = idDevices[i].toUpperCase();
- responseData[idDevice] = data;
- }
- }
- // tong hop data tu responseData phan tich o tren vao cho moi room(cac khoang thoi gian voi status cua tat ca sensor thuoc room)
- // {
- // room_id_1: [
- // {
- // start_time: a,
- // end_time: b,
- // status: 1
- // },
- // {
- // start_time: c,
- // end_time: d,
- // status: 0
- // }
- // ]
- // }
- var objectRoom = {};
- for (let i = 0; i < rooms.length; i++) {
- let room = rooms[i];
- let values = responseData[room.person_sensor.toUpperCase()];
- if (typeof values != "undefined") {
- var roomId = room.room_id;
- if (typeof objectRoom[roomId] == "undefined") {
- objectRoom[roomId] = values;
- } else {
- objectRoom[roomId] = [...objectRoom[roomId], ...values];
- }
- }
- }
- Object.keys(objectRoom).forEach(function (key) {
- //tien hanh sap xep cac khoang thoi gian duoc tong hop tu cac sensor theo thu tu start_time tang dan cua room
- var values = objectRoom[key];
- values.sort(function(a, b) {
- if (a.startTime > b.startTime) return 1;
- if (a.startTime < b.startTime) return -1;
- return 0;
- });
- var result = [], last;
- var min = values[0].startTime;
- var max = values[0].startTime;
- // tinh toan cac khoang thoi gian co status 1 cho room
- values.forEach(function (r) {
- if (values.length == 1 && r.status == 0) {
- result.push(r);
- return;
- }
- if (r.endTime > max) {
- max = r.endTime;
- }
- if (r.status === 0 ) {
- return;
- } else {
- if (!last || r.startTime > last.endTime)
- result.push(last = r);
- else if (r.endTime > last.endTime)
- last.endTime = r.endTime;
- }
- });
- if(checkGetStatus0) {
- //handle min max status 0
- var minMaxStatus = [
- {
- startTime: min,
- status: 0,
- endTime: result[0].startTime
- },
- {
- startTime: result[result.length - 1].endTime,
- status: 0,
- endTime: max
- }
- ];
- // them cac khoang thoi gian co status = 0 vao giua cac khoang trong cua result chua cac khaong thoi gian co status = 1
- var addObject = [];
- for (let i = 1; i < result.length; i++) {
- if (result.length > 1) {// ko can check dk nay do result.length <=1 thi se ko chay vao trong for roi
- var startTime = result[i - 1].endTime;
- var endTime = result[i].startTime;
- var status = 0;
- addObject.push({startTime: startTime, status: status, endTime: endTime});
- }
- }
- result = [...result, ...minMaxStatus, ...addObject];
- }
- // tinh toan khoang thoi gian = minutes giua end_time va start time
- // {
- // {
- // start_time: a,
- // end_time: b,
- // status: 1,
- // minute: 20
- // }
- // {
- // start_time: c,
- // end_time: d,
- // status: 0,
- // minute: 50
- // }
- // }
- result = result.map(function (r) {
- r.minute = moment(r.endTime).diff(moment(r.startTime), 'minutes');
- return r;
- });
- lastData[key] = result;
- });
- return lastData;
- },
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement