Skip to content

Instantly share code, notes, and snippets.

@esshka
Last active February 24, 2016 18:58
Show Gist options
  • Save esshka/fcca4b34c59964dcf3a4 to your computer and use it in GitHub Desktop.
Save esshka/fcca4b34c59964dcf3a4 to your computer and use it in GitHub Desktop.
api clamps
// Выборка смыканий из базы
`SELECT time, type, duration, rnum, den
FROM (SELECT time, type, duration,
row_number() over(ORDER BY time ASC) rnum,
((select count(*) from clamps where device_id = ${deviceId}) / 200) den
FROM clamps
WHERE clamps.device_id = ${deviceId}
AND (clamps.time BETWEEN '${s}' AND '${e}')
ORDER BY time ASC) full_clamps
WHERE rnum % den = 0`;
// извлекаются записи с полями time, type, duration, rnum, den
// rnum - номер строки
// den - кол-во записей в 'большом смыкании'
// WHERE rnum % den = 0` - условие "что считать большим смыканием". Т е с порядковый номер кратен кол-ву записей в 'большом смыкании'
// Выборка (clamps) обрабатывается так
processedData = _(clamps)
.map(function(n, idx){ // обходим все записи
let average, type, clamp;
if (idx + 1 > clamps.length) { // иногда высказывает ошибка, это чтобы ее не было - не важно
return;
}
else {
try {
average = ((+new Date(clamps[idx+1].time)) - (+new Date(n.time))) / (n.den * 1000); // определяем среднее время смыкания
type = 'norm'; // предполагаем что это нормальное смыкание
} catch (err) {
return;
}
if (average >= normalCycleMin && average <= normalCycleMax) { // если условие выполняется, то смыкание нормальное
type = 'norm';
} else if (average < normalCycleMin) { // если условие выполняется, то смыкание ускор
type = 'acl';
} else if (average > normalCycleMax * 5 && average > 60 * 5) { // если условие выполняется, то смыкание простой
type = 'idle';
} else if (average > normalCycleMax) { // если условие выполняется, то смыкание сбой
type = 'fail';
} else {
type = 'fail'; // если не выполняются условия выше - что-то не так, смыкание - сбой
}
clamp = { // определяем хеш -смыкание
type: type,
ts: +new Date(n.time) // просто переводим датувремя в таймстэмп
};
return clamp;
}
})
.compact()
.value() // получаем значения
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment