Compare commits
52 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| be5e385ae0 | |||
| 363d8aac11 | |||
| a7bea5288c | |||
| 46b6918031 | |||
| df09a4c92b | |||
| f4ac57c8f8 | |||
| 64c6b20a8f | |||
| 8a65f20142 | |||
| 632d65c057 | |||
| e013b9dd63 | |||
| 5605bcbe68 | |||
| 6a85c88fb7 | |||
| bc687cc2de | |||
| 6bb37fd48d | |||
| 4cbc3873f7 | |||
| 64a6698611 | |||
| 70a4f448e9 | |||
| ddd4524407 | |||
| 92a2fc8a26 | |||
| af999c8b33 | |||
| 5a1577db80 | |||
| f62c99c73a | |||
| ac8c52b75b | |||
| e240ff24b2 | |||
| 9fa0fd5322 | |||
| 567855b7e5 | |||
| 8613369885 | |||
| 88e5f0c155 | |||
| d7a3a06039 | |||
| 6a3c35e594 | |||
| a9f030e95f | |||
| 71f84cb25b | |||
| 13996acf5a | |||
| dd3328b96c | |||
| 47fd4d26b0 | |||
| 685e7d2f15 | |||
| edc3859ba7 | |||
| 9848de900b | |||
| b09d39f18f | |||
| 7283498e26 | |||
| 00c508fd78 | |||
| f02be97497 | |||
| 6845d78716 | |||
| 1c8c26ff25 | |||
| d4f9a6f5f4 | |||
| 7ddc9d8220 | |||
| a9114cc05f | |||
| 9cde625d0c | |||
| 9fa91fcd63 | |||
| 27a140df3d | |||
| 20a2b74e9f | |||
| 11e90e1685 |
@@ -1,6 +1,11 @@
|
|||||||
# BioProAPIServer
|
# BioProAPIServer
|
||||||
|
|
||||||
### Setup pi3 postgresql
|
### Setup postgresql
|
||||||
|
|
||||||
|
##### Installation
|
||||||
|
```
|
||||||
|
sudo apt-get install postgresql libpq-dev postgresql-client postgresql-client-common
|
||||||
|
```
|
||||||
|
|
||||||
##### Switch to the Postgres user to configure the database
|
##### Switch to the Postgres user to configure the database
|
||||||
```
|
```
|
||||||
@@ -14,11 +19,18 @@ createuser biopro -P --interactive
|
|||||||
|
|
||||||
##### Postgres command (type psql first to connect postgres)
|
##### Postgres command (type psql first to connect postgres)
|
||||||
```
|
```
|
||||||
|
#Enter postgresql
|
||||||
|
psql
|
||||||
|
|
||||||
#Find databases
|
#Find databases
|
||||||
\l
|
\l
|
||||||
|
|
||||||
#Find tables
|
#Find tables
|
||||||
\dt
|
\dt
|
||||||
|
|
||||||
|
# Create new database and table if you need
|
||||||
|
create database test
|
||||||
|
test=> create table people (name text, company text)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Run apiServer on device
|
### Run apiServer on device
|
||||||
@@ -39,11 +51,11 @@ change the code following as:
|
|||||||
change apiserver port to postgres port, 54321 --> 5432 (default)
|
change apiserver port to postgres port, 54321 --> 5432 (default)
|
||||||
*/
|
*/
|
||||||
export const pgDB = {
|
export const pgDB = {
|
||||||
host: '127.0.0.1', // 服务器地址
|
host: '127.0.0.1',
|
||||||
port: 54321, // 数据库端口号 -----------------> 5432
|
port: 54321, // -----------------> 5432
|
||||||
username: 'biopro', // 数据库用户名
|
username: 'biopro',
|
||||||
password: 'BioProControlBox', // 数据库密码
|
password: 'BioProControlBox',
|
||||||
database: 'postgres' // 数据库名称
|
database: 'postgres'
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -67,7 +79,7 @@ nohup node /home/pi/bioproapiserver/dist/app.js > /home/pi/.api_server.out &
|
|||||||
|
|
||||||
##### Localhost test port binding (your device:54321 -> raspberrypi:5432)
|
##### Localhost test port binding (your device:54321 -> raspberrypi:5432)
|
||||||
```
|
```
|
||||||
ssh -NL 54321:localhost:5432 pi@your-pi3-ip
|
ssh -NL 54321:localhost:5432 pi@your-pi-ip
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Run apiServer on your localhost (remember binding port first)
|
##### Run apiServer on your localhost (remember binding port first)
|
||||||
@@ -79,4 +91,4 @@ npm run start
|
|||||||
```
|
```
|
||||||
|
|
||||||
##### References
|
##### References
|
||||||
>https://opensource.com/article/17/10/set-postgres-database-your-raspberry-pi
|
>https://opensource.com/article/17/10/set-postgres-database-your-raspberry-pi
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "gulp nodemon",
|
"start": "gulp nodemon",
|
||||||
"dev": "gulp",
|
"dev": "gulp",
|
||||||
"build": "babel src -d dist",
|
"build": "babel src -d dist --copy-files",
|
||||||
"production": "node dist/app.js",
|
"production": "node dist/app.js",
|
||||||
"test": "jest",
|
"test": "jest",
|
||||||
"link": "eslint .",
|
"link": "eslint .",
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
import RecordingDataMeta from '../../models/file/recording_data_meta'
|
||||||
|
import childProcess from 'child_process'
|
||||||
|
import path from 'path'
|
||||||
|
|
||||||
|
const recordingDataMeta = new RecordingDataMeta()
|
||||||
|
|
||||||
|
export const spikeDetect = async (ctx, next) => {
|
||||||
|
const request = ctx.request.body
|
||||||
|
|
||||||
|
const id = request.id
|
||||||
|
const channel = request.channel
|
||||||
|
const cutOffFreq = request.cut_off_freq
|
||||||
|
const threshold = request.threshold
|
||||||
|
const waveForm = request.waveForm
|
||||||
|
const retDataType = request.ret_data_type
|
||||||
|
// console.log(id, channel, cutOffFreq, threshold, waveForm)
|
||||||
|
|
||||||
|
const result = await recordingDataMeta.getByID(id)
|
||||||
|
const channels = JSON.parse(result[0].channels)
|
||||||
|
const sampleRate = 8e5 / result[0].parameter_set.ADC_CLOCK / channels.length
|
||||||
|
const timeDuration = result[0].time_duration / 1e6
|
||||||
|
// console.log(sampleRate, timeDuration)
|
||||||
|
|
||||||
|
const process = childProcess.spawnSync('python3', [
|
||||||
|
path.join(__dirname, '/spikeDetect.py'),
|
||||||
|
'meta_id=' + id,
|
||||||
|
'channel=' + channel,
|
||||||
|
'cut_off_freq=' + cutOffFreq,
|
||||||
|
'threshold=' + threshold,
|
||||||
|
'waveform=' + waveForm,
|
||||||
|
'sample_rate=' + sampleRate,
|
||||||
|
'time_duration=' + timeDuration,
|
||||||
|
'ret_data_type=' + retDataType
|
||||||
|
], { maxBuffer: 2 * 1024 * 1024 * 1024 })
|
||||||
|
|
||||||
|
// console.log('out', process.stdout.toString())
|
||||||
|
console.log('err', process.stderr.toString())
|
||||||
|
|
||||||
|
ctx.body = process.stdout.toString()
|
||||||
|
|
||||||
|
// const process = child_process.execSync('python3 /Users/lubokai/Desktop/bioproapiserver/src/controllers/analysis/test.py 1089 0')
|
||||||
|
// console.log(process)
|
||||||
|
// process.stdout.on('data', (data) => {
|
||||||
|
// _data += data.toString()
|
||||||
|
// })
|
||||||
|
|
||||||
|
// process.stderr.on('data', (data) => {
|
||||||
|
// console.error(data.toString())
|
||||||
|
// })
|
||||||
|
|
||||||
|
// process.on('exit', (code) => {
|
||||||
|
// console.log(_data)
|
||||||
|
// console.log(`Child exited with code ${code}`)
|
||||||
|
// })
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
import sys
|
||||||
|
import ast
|
||||||
|
import psycopg2
|
||||||
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
from math import ceil, floor
|
||||||
|
from json import loads, dumps
|
||||||
|
from scipy.fft import fft, fftfreq, rfft, rfftfreq, irfft, ifft
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
params = {}
|
||||||
|
for input in sys.argv[1:]: #Now we're going to iterate over argv[1:] (argv[0] is the program name)
|
||||||
|
param = input.split("=") #Get what's left of the '='
|
||||||
|
params[param[0]] = param[1]
|
||||||
|
|
||||||
|
meta_id = params['meta_id']
|
||||||
|
channel = params['channel']
|
||||||
|
cut_off_freq = int(params['cut_off_freq'])
|
||||||
|
threshold = ast.literal_eval('[' + params['threshold'] + ']')
|
||||||
|
waveform = ast.literal_eval('[' + params['waveform'] + ']')
|
||||||
|
SAMPLE_RATE = int(params['sample_rate'])
|
||||||
|
DURATION = ceil(float(params['time_duration']))
|
||||||
|
DELTA_TIME = 1e6 / SAMPLE_RATE
|
||||||
|
N = SAMPLE_RATE * DURATION
|
||||||
|
ret_data_type = params['ret_data_type']
|
||||||
|
|
||||||
|
# print(meta_id, channel, cut_off_freq, threshold, waveForm, SAMPLE_RATE, DURATION, N)
|
||||||
|
|
||||||
|
conn = psycopg2.connect(database="postgres", user="biopro", password="BioProControlBox", host="127.0.0.1", port="5432")
|
||||||
|
cur = conn.cursor()
|
||||||
|
sql_str = 'SELECT data FROM "public"."' + str(channel) + '_recording_data_raws" WHERE parent = ' + meta_id + 'ORDER BY id ASC'
|
||||||
|
cur.execute(sql_str)
|
||||||
|
ret = None
|
||||||
|
try:
|
||||||
|
ret = cur.fetchall()
|
||||||
|
except BaseException as e:
|
||||||
|
print(e)
|
||||||
|
exit
|
||||||
|
finally:
|
||||||
|
time = np.array([], dtype=int)
|
||||||
|
data = np.array([])
|
||||||
|
|
||||||
|
for sub_data in ret:
|
||||||
|
for split_data in sub_data[0].split('"***"')[:-1]:
|
||||||
|
value = np.array(split_data.split(' '))
|
||||||
|
time = np.append(time, value[::2].astype(np.int))
|
||||||
|
data = np.append(data, value[1::2].astype(np.int))
|
||||||
|
|
||||||
|
# print(len(time), len(data))
|
||||||
|
|
||||||
|
xf = rfftfreq(N, 1 / SAMPLE_RATE)
|
||||||
|
points_per_freq = len(xf) / (SAMPLE_RATE / 2)
|
||||||
|
target_idx = int(points_per_freq * cut_off_freq)
|
||||||
|
|
||||||
|
# print(xf[target_idx])
|
||||||
|
|
||||||
|
yf = rfft(data)
|
||||||
|
yf[:target_idx] = 0
|
||||||
|
new_sig = np.round(irfft(yf, len(data)),3)
|
||||||
|
|
||||||
|
# print(time[-1])
|
||||||
|
# print(len(datas))
|
||||||
|
# print(len(yf),yf)
|
||||||
|
|
||||||
|
if threshold[0] == 'below':
|
||||||
|
th = new_sig < threshold[1]
|
||||||
|
elif threshold[0] == 'over':
|
||||||
|
th = new_sig > threshold[1]
|
||||||
|
elif threshold[0] == 'auto':
|
||||||
|
th = new_sig
|
||||||
|
|
||||||
|
threshold_edges = np.convolve([1, -1], th, mode='same')
|
||||||
|
thresholded_edge_indices = np.where(threshold_edges==1)[0]
|
||||||
|
|
||||||
|
filter_array = []
|
||||||
|
for idx, point in enumerate(thresholded_edge_indices):
|
||||||
|
if idx > 0:
|
||||||
|
if time[thresholded_edge_indices[idx]] - int(waveform[2]) >= time[thresholded_edge_indices[idx-1]]:
|
||||||
|
filter_array.append(True)
|
||||||
|
elif time[thresholded_edge_indices[idx]] - int(waveform[1]) >= time[thresholded_edge_indices[idx-1]]:
|
||||||
|
filter_array.append(True)
|
||||||
|
else:
|
||||||
|
filter_array.append(False)
|
||||||
|
else:
|
||||||
|
if time[thresholded_edge_indices[idx]] - int(waveform[1]) < 0:
|
||||||
|
filter_array.append(False)
|
||||||
|
else:
|
||||||
|
filter_array.append(True)
|
||||||
|
|
||||||
|
timemark_list = thresholded_edge_indices[filter_array]
|
||||||
|
|
||||||
|
if ret_data_type == 'all':
|
||||||
|
print(' '.join(str(x) for x in time))
|
||||||
|
print(' '.join(str(x) for x in new_sig))
|
||||||
|
print(' '.join(str(x) for x in timemark_list))
|
||||||
|
elif ret_data_type == 'partial':
|
||||||
|
return_sub_signal_lists = {}
|
||||||
|
for timemark in timemark_list:
|
||||||
|
start_index = timemark - floor(int(waveform[1] / DELTA_TIME))
|
||||||
|
end_index = timemark + ceil(int(waveform[2] / DELTA_TIME))
|
||||||
|
|
||||||
|
subSignal = new_sig[start_index: end_index + 2]
|
||||||
|
return_sub_signal_lists[str(timemark)] = ' '.join(str(x) for x in subSignal)
|
||||||
|
print(dumps(return_sub_signal_lists))
|
||||||
|
|
||||||
|
conn.commit()
|
||||||
|
conn.close()
|
||||||
|
exit
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
import TaskModal from '../../models/controller/task'
|
||||||
|
|
||||||
|
const task = new TaskModal()
|
||||||
|
|
||||||
|
export const create = async (ctx, next) => {
|
||||||
|
const data = ctx.request.body
|
||||||
|
const result = await task.create(data)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const update = async (ctx, next) => {
|
||||||
|
const data = ctx.request.body
|
||||||
|
const result = await task.update(data)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const updateByID = async (ctx, next) => {
|
||||||
|
const data = ctx.request.body
|
||||||
|
const id = ctx.params.id
|
||||||
|
const result = await task.updateByID(data, id)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const updateByAttr = async (ctx, next) => {
|
||||||
|
const data = ctx.request.body
|
||||||
|
const attr = ctx.params.attr
|
||||||
|
const value = ctx.params.value
|
||||||
|
const result = await task.updateByAttr(data, attr, value)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const clearDeleted = async (ctx, next) => {
|
||||||
|
const result = await task.clearDeleted()
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getByID = async (ctx, next) => {
|
||||||
|
const id = ctx.params.id
|
||||||
|
const result = await task.getByID(id)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getByAttr = async (ctx, next) => {
|
||||||
|
const attr = ctx.params.attr
|
||||||
|
const value = ctx.params.value
|
||||||
|
const result = await task.getByAttr(attr, value)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getAll = async (ctx, next) => {
|
||||||
|
const result = await task.getAll()
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
@@ -20,7 +20,8 @@ export const update = async (ctx, next) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const clearDeleted = async (ctx, next) => {
|
export const clearDeleted = async (ctx, next) => {
|
||||||
const result = await collection.clearDeleted()
|
const controllerID = ctx.params.controller_id
|
||||||
|
const result = await collection.clearDeleted(controllerID)
|
||||||
ctx.body = result
|
ctx.body = result
|
||||||
|
|
||||||
next()
|
next()
|
||||||
@@ -36,7 +37,8 @@ export const getByID = async (ctx, next) => {
|
|||||||
|
|
||||||
export const getByName = async (ctx, next) => {
|
export const getByName = async (ctx, next) => {
|
||||||
const name = ctx.params.name
|
const name = ctx.params.name
|
||||||
const result = await collection.getByName(name)
|
const controllerID = ctx.params.controller_id
|
||||||
|
const result = await collection.getByName(name, controllerID)
|
||||||
ctx.body = result
|
ctx.body = result
|
||||||
|
|
||||||
next()
|
next()
|
||||||
@@ -62,7 +64,8 @@ export const getByParentName = async (ctx, next) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const getAll = async (ctx, next) => {
|
export const getAll = async (ctx, next) => {
|
||||||
const result = await collection.getAll()
|
const controllerID = ctx.params.controller_id
|
||||||
|
const result = await collection.getAll(controllerID)
|
||||||
ctx.body = result
|
ctx.body = result
|
||||||
|
|
||||||
next()
|
next()
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ const recordingDataMeta = new RecordingDataMeta()
|
|||||||
export const create = async (ctx, next) => {
|
export const create = async (ctx, next) => {
|
||||||
const data = ctx.request.body
|
const data = ctx.request.body
|
||||||
console.log(auth.CheckAuth(ctx))
|
console.log(auth.CheckAuth(ctx))
|
||||||
|
// console.log(data)
|
||||||
// console.log(ctx.request.header.authorization)
|
// console.log(ctx.request.header.authorization)
|
||||||
const result = await recordingDataMeta.create(data)
|
const result = await recordingDataMeta.create(data)
|
||||||
// console.log(result)
|
// console.log(result)
|
||||||
@@ -47,6 +48,40 @@ export const getByParent = async (ctx, next) => {
|
|||||||
next()
|
next()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const getCountByParent = async (ctx, next) => {
|
||||||
|
const type = ctx.params.type
|
||||||
|
const parent = ctx.params.parent
|
||||||
|
const result = await recordingDataMeta.getCountByParent(type, parent)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getByParentWithLimit = async (ctx, next) => {
|
||||||
|
const type = ctx.params.type
|
||||||
|
const parent = ctx.params.parent
|
||||||
|
const limit = ctx.params.limit
|
||||||
|
const offset = ctx.params.offset
|
||||||
|
const order = ctx.params.order
|
||||||
|
const result = await recordingDataMeta.getByParentWithLimit(type, parent, limit, offset, order)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getByAttrsParentWithLimit = async (ctx, next) => {
|
||||||
|
const type = ctx.params.type
|
||||||
|
const parent = ctx.params.parent
|
||||||
|
const limit = ctx.params.limit
|
||||||
|
const offset = ctx.params.offset
|
||||||
|
const order = ctx.params.order
|
||||||
|
const attr = ctx.params.attr
|
||||||
|
const result = await recordingDataMeta.getByAttrsParentWithLimit(type, parent, limit, offset, order, attr)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
export const getByUUID = async (ctx, next) => {
|
export const getByUUID = async (ctx, next) => {
|
||||||
const uuid = ctx.params.uuid
|
const uuid = ctx.params.uuid
|
||||||
const result = await recordingDataMeta.getByUUID(uuid)
|
const result = await recordingDataMeta.getByUUID(uuid)
|
||||||
|
|||||||
@@ -25,6 +25,16 @@ export const update = async (ctx, next) => {
|
|||||||
next()
|
next()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const updateByIDs = async (ctx, next) => {
|
||||||
|
const index = ctx.params.channel
|
||||||
|
const data = ctx.request.body
|
||||||
|
const id = ctx.params.id
|
||||||
|
const result = await recordingDataMini.updateByIDs(data, id, index)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
// export const get = async (ctx, next) => {
|
// export const get = async (ctx, next) => {
|
||||||
// const index = ctx.params.channel
|
// const index = ctx.params.channel
|
||||||
// const id = ctx.params.id
|
// const id = ctx.params.id
|
||||||
@@ -51,6 +61,15 @@ export const getByID = async (ctx, next) => {
|
|||||||
next()
|
next()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const getByIDs = async (ctx, next) => {
|
||||||
|
const index = ctx.params.channel
|
||||||
|
const id = ctx.params.id
|
||||||
|
const result = await recordingDataMini.getByIDs(id, index)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
export const getMeanDataByID = async (ctx, next) => {
|
export const getMeanDataByID = async (ctx, next) => {
|
||||||
const index = ctx.params.channel
|
const index = ctx.params.channel
|
||||||
const id = ctx.params.id
|
const id = ctx.params.id
|
||||||
|
|||||||
@@ -25,6 +25,26 @@ export const update = async (ctx, next) => {
|
|||||||
next()
|
next()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const updateSdData = async (ctx, next) => {
|
||||||
|
const index = ctx.params.channel
|
||||||
|
const data = ctx.request.body
|
||||||
|
const id = ctx.params.id
|
||||||
|
const result = await recordingDataRaw.updateSdData(data, id, index)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const updateByIDs = async (ctx, next) => {
|
||||||
|
const index = ctx.params.channel
|
||||||
|
const data = ctx.request.body
|
||||||
|
const id = ctx.params.id
|
||||||
|
const result = await recordingDataRaw.updateByIDs(data, id, index)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
export const clearDeleted = async (ctx, next) => {
|
export const clearDeleted = async (ctx, next) => {
|
||||||
const index = ctx.params.channel
|
const index = ctx.params.channel
|
||||||
const result = await recordingDataRaw.clearDeleted(index)
|
const result = await recordingDataRaw.clearDeleted(index)
|
||||||
@@ -42,6 +62,15 @@ export const getByID = async (ctx, next) => {
|
|||||||
next()
|
next()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const getByIDs = async (ctx, next) => {
|
||||||
|
const index = ctx.params.channel
|
||||||
|
const id = ctx.params.id
|
||||||
|
const result = await recordingDataRaw.getByIDs(id, index)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
export const getDataByID = async (ctx, next) => {
|
export const getDataByID = async (ctx, next) => {
|
||||||
const index = ctx.params.channel
|
const index = ctx.params.channel
|
||||||
const id = ctx.params.id
|
const id = ctx.params.id
|
||||||
@@ -70,6 +99,16 @@ export const getAttrByID = async (ctx, next) => {
|
|||||||
next()
|
next()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const getAttrByIDs = async (ctx, next) => {
|
||||||
|
const index = ctx.params.channel
|
||||||
|
const id = ctx.params.id
|
||||||
|
const attr = ctx.params.attr
|
||||||
|
const result = await recordingDataRaw.getByAttrIDs(id, attr, index)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
export const getAttrByParent = async (ctx, next) => {
|
export const getAttrByParent = async (ctx, next) => {
|
||||||
const index = ctx.params.channel
|
const index = ctx.params.channel
|
||||||
const parent = ctx.params.parent
|
const parent = ctx.params.parent
|
||||||
|
|||||||
@@ -1,17 +1,25 @@
|
|||||||
import upload from './upload'
|
import upload from './upload'
|
||||||
import * as api from './api'
|
import * as api from './api'
|
||||||
import * as auth from './auth'
|
import * as auth from './auth'
|
||||||
|
import * as controller from './product/controller'
|
||||||
|
import * as device from './product/device'
|
||||||
import * as collection from './file/collection'
|
import * as collection from './file/collection'
|
||||||
|
import * as task from './controller/task'
|
||||||
import * as recordingDataMeta from './file/recording_data_meta'
|
import * as recordingDataMeta from './file/recording_data_meta'
|
||||||
import * as recordingDataRaw from './file/recording_data_raw'
|
import * as recordingDataRaw from './file/recording_data_raw'
|
||||||
import * as recordingDataMini from './file/recording_data_mini'
|
import * as recordingDataMini from './file/recording_data_mini'
|
||||||
|
import * as analysis from './analysis'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
upload,
|
upload,
|
||||||
api,
|
api,
|
||||||
auth,
|
auth,
|
||||||
|
controller,
|
||||||
|
device,
|
||||||
collection,
|
collection,
|
||||||
|
task,
|
||||||
recordingDataMeta,
|
recordingDataMeta,
|
||||||
recordingDataRaw,
|
recordingDataRaw,
|
||||||
recordingDataMini
|
recordingDataMini,
|
||||||
|
analysis
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,95 @@
|
|||||||
|
import ControllerModal from '../../models/product/controller'
|
||||||
|
|
||||||
|
const controller = new ControllerModal()
|
||||||
|
|
||||||
|
export const create = async (ctx, next) => {
|
||||||
|
const data = ctx.request.body
|
||||||
|
const result = await controller.create(data)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const update = async (ctx, next) => {
|
||||||
|
const data = ctx.request.body
|
||||||
|
const id = ctx.params.id
|
||||||
|
const result = await controller.update(data, id)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const updateByID = async (ctx, next) => {
|
||||||
|
const data = ctx.request.body
|
||||||
|
const id = ctx.params.id
|
||||||
|
const result = await controller.updateByID(data, id)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const updateByAttr = async (ctx, next) => {
|
||||||
|
const data = ctx.request.body
|
||||||
|
const attr = ctx.params.attr
|
||||||
|
const value = ctx.params.value
|
||||||
|
const result = await controller.updateByAttr(data, attr, value)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const clearDeleted = async (ctx, next) => {
|
||||||
|
const result = await controller.clearDeleted()
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getByMac = async (ctx, next) => {
|
||||||
|
const mac = ctx.params.mac
|
||||||
|
const result = await controller.getByMac(mac)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getByAttr = async (ctx, next) => {
|
||||||
|
const attr = ctx.params.attr
|
||||||
|
const value = ctx.params.value
|
||||||
|
const result = await controller.getByAttr(attr, value)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getAll = async (ctx, next) => {
|
||||||
|
const result = await controller.getAll()
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
// export const createTest = async (ctx, next) => {
|
||||||
|
// const data = {
|
||||||
|
// name: 'test',
|
||||||
|
// parent: -1,
|
||||||
|
// size: 0
|
||||||
|
// }
|
||||||
|
// const result = await controller.create(data)
|
||||||
|
// ctx.body = result
|
||||||
|
|
||||||
|
// next()
|
||||||
|
// }
|
||||||
|
|
||||||
|
// export const updateTest = async (ctx, next) => {
|
||||||
|
// const data = {
|
||||||
|
// name: 'test121',
|
||||||
|
// parent: -1232,
|
||||||
|
// size: 1243
|
||||||
|
// }
|
||||||
|
// const id = 2
|
||||||
|
// const result = await controller.update(data, id)
|
||||||
|
// ctx.body = result
|
||||||
|
|
||||||
|
// next()
|
||||||
|
// }
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
import DeviceModal from '../../models/product/device'
|
||||||
|
|
||||||
|
const device = new DeviceModal()
|
||||||
|
|
||||||
|
export const create = async (ctx, next) => {
|
||||||
|
const data = ctx.request.body
|
||||||
|
const result = await device.create(data)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const update = async (ctx, next) => {
|
||||||
|
const data = ctx.request.body
|
||||||
|
const result = await device.update(data)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const updateByID = async (ctx, next) => {
|
||||||
|
const data = ctx.request.body
|
||||||
|
const id = ctx.params.id
|
||||||
|
const result = await device.updateByID(data, id)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const updateByMac = async (ctx, next) => {
|
||||||
|
const data = ctx.request.body
|
||||||
|
const mac = ctx.params.mac
|
||||||
|
const result = await device.updateByMac(data, mac)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const updateByAttr = async (ctx, next) => {
|
||||||
|
const data = ctx.request.body
|
||||||
|
const attr = ctx.params.attr
|
||||||
|
const value = ctx.params.value
|
||||||
|
const result = await device.updateByAttr(data, attr, value)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const clearDeleted = async (ctx, next) => {
|
||||||
|
const result = await device.clearDeleted()
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getByMac = async (ctx, next) => {
|
||||||
|
const mac = ctx.params.mac
|
||||||
|
const result = await device.getByMac(mac)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getByAttr = async (ctx, next) => {
|
||||||
|
const attr = ctx.params.attr
|
||||||
|
const value = ctx.params.value
|
||||||
|
const result = await device.getByAttr(attr, value)
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getAll = async (ctx, next) => {
|
||||||
|
const result = await device.getAll()
|
||||||
|
ctx.body = result
|
||||||
|
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
// export const createTest = async (ctx, next) => {
|
||||||
|
// const data = {
|
||||||
|
// name: 'test',
|
||||||
|
// parent: -1,
|
||||||
|
// size: 0
|
||||||
|
// }
|
||||||
|
// const result = await device.create(data)
|
||||||
|
// ctx.body = result
|
||||||
|
|
||||||
|
// next()
|
||||||
|
// }
|
||||||
|
|
||||||
|
// export const updateTest = async (ctx, next) => {
|
||||||
|
// const data = {
|
||||||
|
// name: 'test121',
|
||||||
|
// parent: -1232,
|
||||||
|
// size: 1243
|
||||||
|
// }
|
||||||
|
// const id = 2
|
||||||
|
// const result = await device.update(data, id)
|
||||||
|
// ctx.body = result
|
||||||
|
|
||||||
|
// next()
|
||||||
|
// }
|
||||||
@@ -23,6 +23,9 @@ db.Sequelize = Sequelize
|
|||||||
db.sequelize = sequelize
|
db.sequelize = sequelize
|
||||||
|
|
||||||
db.tutorials = require('./schema/tutirial.model')(sequelize, Sequelize)
|
db.tutorials = require('./schema/tutirial.model')(sequelize, Sequelize)
|
||||||
|
db.controllers = require('./schema/controller.model')(sequelize, Sequelize)
|
||||||
|
db.tasks = require('./schema/task.model')(sequelize, Sequelize)
|
||||||
|
db.devices = require('./schema/device.model')(sequelize, Sequelize)
|
||||||
db.collections = require('./schema/collection.model')(sequelize, Sequelize)
|
db.collections = require('./schema/collection.model')(sequelize, Sequelize)
|
||||||
db.recording_data_metas = require('./schema/recording_data_meta.model')(sequelize, Sequelize)
|
db.recording_data_metas = require('./schema/recording_data_meta.model')(sequelize, Sequelize)
|
||||||
for (let i = 0; i < 32; i++) {
|
for (let i = 0; i < 32; i++) {
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ module.exports = (sequelize, Sequelize) => {
|
|||||||
type: Sequelize.JSONB,
|
type: Sequelize.JSONB,
|
||||||
defaultValue: {}
|
defaultValue: {}
|
||||||
},
|
},
|
||||||
|
controller_id: {
|
||||||
|
type: Sequelize.INTEGER,
|
||||||
|
defaultValue: -1
|
||||||
|
},
|
||||||
size: {
|
size: {
|
||||||
type: Sequelize.INTEGER,
|
type: Sequelize.INTEGER,
|
||||||
defaultValue: -1
|
defaultValue: -1
|
||||||
|
|||||||
@@ -0,0 +1,125 @@
|
|||||||
|
module.exports = (sequelize, Sequelize) => {
|
||||||
|
const Controller = sequelize.define('controller', {
|
||||||
|
name: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
spec: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
mac_address: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
ip_address: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
configuration: {
|
||||||
|
type: Sequelize.JSONB,
|
||||||
|
defaultValue: {}
|
||||||
|
},
|
||||||
|
wifi_name: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
wifi_password: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
mqtt_id: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
mqtt_address: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
api_mqtt_address: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
root: {
|
||||||
|
type: Sequelize.INTEGER,
|
||||||
|
defaultValue: -1
|
||||||
|
},
|
||||||
|
// group/user: {
|
||||||
|
// admin: [id...],
|
||||||
|
// normal: [id...],
|
||||||
|
// guest: [id...]
|
||||||
|
// }
|
||||||
|
group_auth: {
|
||||||
|
type: Sequelize.JSONB,
|
||||||
|
defaultValue: {
|
||||||
|
owner: [],
|
||||||
|
maintainer: [],
|
||||||
|
guest: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
user_auth: {
|
||||||
|
type: Sequelize.JSONB,
|
||||||
|
defaultValue: {
|
||||||
|
owner: [],
|
||||||
|
maintainer: [],
|
||||||
|
guest: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
device: {
|
||||||
|
type: Sequelize.JSONB,
|
||||||
|
defaultValue: {}
|
||||||
|
},
|
||||||
|
device_scanned: {
|
||||||
|
type: Sequelize.ARRAY(Sequelize.STRING),
|
||||||
|
defaultValue: []
|
||||||
|
},
|
||||||
|
device_connected: {
|
||||||
|
type: Sequelize.ARRAY(Sequelize.STRING),
|
||||||
|
defaultValue: []
|
||||||
|
},
|
||||||
|
// project/task: {
|
||||||
|
// running: [id...],
|
||||||
|
// library: [id...]
|
||||||
|
// }
|
||||||
|
project: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
task: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
// task: {
|
||||||
|
// type: Sequelize.JSONB,
|
||||||
|
// defaultValue: {
|
||||||
|
// running: [],
|
||||||
|
// library: []
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
software_version: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
status: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
deleted: {
|
||||||
|
type: Sequelize.BOOLEAN,
|
||||||
|
defaultValue: false
|
||||||
|
},
|
||||||
|
created_at: {
|
||||||
|
type: Sequelize.DATE,
|
||||||
|
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
|
||||||
|
},
|
||||||
|
updated_at: {
|
||||||
|
type: Sequelize.DATE,
|
||||||
|
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
timestamps: false
|
||||||
|
})
|
||||||
|
|
||||||
|
return Controller
|
||||||
|
}
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
module.exports = (sequelize, Sequelize) => {
|
||||||
|
const Device = sequelize.define('device', {
|
||||||
|
name: {
|
||||||
|
type: Sequelize.STRING
|
||||||
|
},
|
||||||
|
mac_address: {
|
||||||
|
type: Sequelize.STRING
|
||||||
|
},
|
||||||
|
serial_number: {
|
||||||
|
type: Sequelize.STRING
|
||||||
|
},
|
||||||
|
configuration: {
|
||||||
|
type: Sequelize.JSONB,
|
||||||
|
defaultValue: {}
|
||||||
|
},
|
||||||
|
library: {
|
||||||
|
type: Sequelize.STRING
|
||||||
|
},
|
||||||
|
library_version: {
|
||||||
|
type: Sequelize.STRING
|
||||||
|
},
|
||||||
|
device_version: {
|
||||||
|
type: Sequelize.STRING
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
battery: {
|
||||||
|
type: Sequelize.INTEGER,
|
||||||
|
defaultValue: 0
|
||||||
|
},
|
||||||
|
temperature: {
|
||||||
|
type: Sequelize.DOUBLE,
|
||||||
|
defaultValue: 0
|
||||||
|
},
|
||||||
|
auto_connect: {
|
||||||
|
type: Sequelize.BOOLEAN,
|
||||||
|
defaultValue: true
|
||||||
|
},
|
||||||
|
connect_priority: {
|
||||||
|
type: Sequelize.INTEGER,
|
||||||
|
defaultValue: 0
|
||||||
|
},
|
||||||
|
connect_time: {
|
||||||
|
type: Sequelize.BIGINT,
|
||||||
|
defaultValue: 0
|
||||||
|
},
|
||||||
|
connect_status: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: 'idle'
|
||||||
|
},
|
||||||
|
connect_id: {
|
||||||
|
type: Sequelize.INTEGER,
|
||||||
|
defaultValue: -1
|
||||||
|
},
|
||||||
|
parameter_set: {
|
||||||
|
type: Sequelize.JSONB,
|
||||||
|
defaultValue: {}
|
||||||
|
},
|
||||||
|
running: {
|
||||||
|
type: Sequelize.BOOLEAN,
|
||||||
|
defaultValue: false
|
||||||
|
},
|
||||||
|
calibration: {
|
||||||
|
type: Sequelize.TEXT,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
user_auth: {
|
||||||
|
type: Sequelize.JSONB,
|
||||||
|
defaultValue: {
|
||||||
|
owner: [],
|
||||||
|
maintainer: [],
|
||||||
|
guest: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
deleted: {
|
||||||
|
type: Sequelize.BOOLEAN,
|
||||||
|
defaultValue: false
|
||||||
|
},
|
||||||
|
created_at: {
|
||||||
|
type: Sequelize.DATE,
|
||||||
|
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
|
||||||
|
},
|
||||||
|
updated_at: {
|
||||||
|
type: Sequelize.DATE,
|
||||||
|
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
timestamps: false
|
||||||
|
})
|
||||||
|
|
||||||
|
return Device
|
||||||
|
}
|
||||||
@@ -22,12 +22,12 @@ module.exports = (sequelize, Sequelize) => {
|
|||||||
defaultValue: ''
|
defaultValue: ''
|
||||||
},
|
},
|
||||||
size: {
|
size: {
|
||||||
type: Sequelize.INTEGER,
|
type: Sequelize.STRING,
|
||||||
defaultValue: -1
|
defaultValue: '-1'
|
||||||
},
|
},
|
||||||
time_duration: {
|
time_duration: {
|
||||||
type: Sequelize.INTEGER,
|
type: Sequelize.STRING,
|
||||||
defaultValue: 0
|
defaultValue: '0'
|
||||||
},
|
},
|
||||||
configuration: {
|
configuration: {
|
||||||
type: Sequelize.JSONB,
|
type: Sequelize.JSONB,
|
||||||
@@ -79,7 +79,11 @@ module.exports = (sequelize, Sequelize) => {
|
|||||||
},
|
},
|
||||||
user_auth: {
|
user_auth: {
|
||||||
type: Sequelize.JSONB,
|
type: Sequelize.JSONB,
|
||||||
defaultValue: {}
|
defaultValue: {
|
||||||
|
owner: [],
|
||||||
|
maintainer: [],
|
||||||
|
guest: []
|
||||||
|
}
|
||||||
},
|
},
|
||||||
created_at: {
|
created_at: {
|
||||||
type: Sequelize.DATE,
|
type: Sequelize.DATE,
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ module.exports = (sequelize, Sequelize, i) => {
|
|||||||
defaultValue: 0
|
defaultValue: 0
|
||||||
},
|
},
|
||||||
size: {
|
size: {
|
||||||
type: Sequelize.INTEGER,
|
type: Sequelize.STRING,
|
||||||
defaultValue: -1
|
defaultValue: '-1'
|
||||||
},
|
},
|
||||||
path: {
|
path: {
|
||||||
type: Sequelize.STRING,
|
type: Sequelize.STRING,
|
||||||
@@ -36,12 +36,12 @@ module.exports = (sequelize, Sequelize, i) => {
|
|||||||
defaultValue: -1
|
defaultValue: -1
|
||||||
},
|
},
|
||||||
start_time: {
|
start_time: {
|
||||||
type: Sequelize.INTEGER,
|
type: Sequelize.STRING,
|
||||||
defaultValue: -1
|
defaultValue: '-1'
|
||||||
},
|
},
|
||||||
end_time: {
|
end_time: {
|
||||||
type: Sequelize.INTEGER,
|
type: Sequelize.STRING,
|
||||||
defaultValue: -1
|
defaultValue: '-1'
|
||||||
},
|
},
|
||||||
data_random: {
|
data_random: {
|
||||||
type: Sequelize.TEXT,
|
type: Sequelize.TEXT,
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ module.exports = (sequelize, Sequelize, i) => {
|
|||||||
defaultValue: 0
|
defaultValue: 0
|
||||||
},
|
},
|
||||||
size: {
|
size: {
|
||||||
type: Sequelize.INTEGER,
|
type: Sequelize.STRING,
|
||||||
defaultValue: -1
|
defaultValue: '-1'
|
||||||
},
|
},
|
||||||
path: {
|
path: {
|
||||||
type: Sequelize.STRING,
|
type: Sequelize.STRING,
|
||||||
@@ -32,17 +32,21 @@ module.exports = (sequelize, Sequelize, i) => {
|
|||||||
defaultValue: -1
|
defaultValue: -1
|
||||||
},
|
},
|
||||||
start_time: {
|
start_time: {
|
||||||
type: Sequelize.INTEGER,
|
type: Sequelize.STRING,
|
||||||
defaultValue: -1
|
defaultValue: '-1'
|
||||||
},
|
},
|
||||||
end_time: {
|
end_time: {
|
||||||
type: Sequelize.INTEGER,
|
type: Sequelize.STRING,
|
||||||
defaultValue: -1
|
defaultValue: '-1'
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
type: Sequelize.TEXT,
|
type: Sequelize.TEXT,
|
||||||
defaultValue: ''
|
defaultValue: ''
|
||||||
},
|
},
|
||||||
|
sd_data: {
|
||||||
|
type: Sequelize.TEXT,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
compressed: {
|
compressed: {
|
||||||
type: Sequelize.BOOLEAN,
|
type: Sequelize.BOOLEAN,
|
||||||
defaultValue: false
|
defaultValue: false
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
module.exports = (sequelize, Sequelize) => {
|
||||||
|
const Scheduler = sequelize.define('scheduler', {
|
||||||
|
name: {
|
||||||
|
type: Sequelize.STRING
|
||||||
|
},
|
||||||
|
description: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
script: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
configuration: {
|
||||||
|
type: Sequelize.JSONB,
|
||||||
|
defaultValue: {}
|
||||||
|
},
|
||||||
|
deleted: {
|
||||||
|
type: Sequelize.BOOLEAN,
|
||||||
|
defaultValue: false
|
||||||
|
},
|
||||||
|
created_at: {
|
||||||
|
type: Sequelize.DATE,
|
||||||
|
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
|
||||||
|
},
|
||||||
|
updated_at: {
|
||||||
|
type: Sequelize.DATE,
|
||||||
|
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
timestamps: false
|
||||||
|
})
|
||||||
|
|
||||||
|
return Scheduler
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
module.exports = (sequelize, Sequelize) => {
|
||||||
|
const Task = sequelize.define('task', {
|
||||||
|
name: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
describe: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
status: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
device_config: {
|
||||||
|
type: Sequelize.JSONB,
|
||||||
|
defaultValue: {}
|
||||||
|
},
|
||||||
|
chart_config: {
|
||||||
|
type: Sequelize.JSONB,
|
||||||
|
defaultValue: {}
|
||||||
|
},
|
||||||
|
formula_config: {
|
||||||
|
type: Sequelize.JSONB,
|
||||||
|
defaultValue: {}
|
||||||
|
},
|
||||||
|
controller_id: {
|
||||||
|
type: Sequelize.INTEGER,
|
||||||
|
defaultValue: -1
|
||||||
|
},
|
||||||
|
deleted: {
|
||||||
|
type: Sequelize.BOOLEAN,
|
||||||
|
defaultValue: false
|
||||||
|
},
|
||||||
|
created_at: {
|
||||||
|
type: Sequelize.DATE,
|
||||||
|
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
|
||||||
|
},
|
||||||
|
updated_at: {
|
||||||
|
type: Sequelize.DATE,
|
||||||
|
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
timestamps: false
|
||||||
|
})
|
||||||
|
|
||||||
|
return Task
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
module.exports = (sequelize, Sequelize) => {
|
||||||
|
const User = sequelize.define('user', {
|
||||||
|
account: {
|
||||||
|
type: Sequelize.STRING
|
||||||
|
},
|
||||||
|
paword: {
|
||||||
|
type: Sequelize.STRING
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
type: Sequelize.STRING
|
||||||
|
},
|
||||||
|
mail: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
configuration: {
|
||||||
|
type: Sequelize.JSONB,
|
||||||
|
defaultValue: {}
|
||||||
|
},
|
||||||
|
devices_list: {
|
||||||
|
type: Sequelize.JSONB,
|
||||||
|
defaultValue: {
|
||||||
|
owner: [],
|
||||||
|
maintainer: [],
|
||||||
|
guest: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
controller_list: {
|
||||||
|
type: Sequelize.JSONB,
|
||||||
|
defaultValue: {
|
||||||
|
owner: [],
|
||||||
|
maintainer: [],
|
||||||
|
guest: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
collection_list: {
|
||||||
|
type: Sequelize.JSONB,
|
||||||
|
defaultValue: {
|
||||||
|
owner: [],
|
||||||
|
maintainer: [],
|
||||||
|
guest: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
meta_list: {
|
||||||
|
type: Sequelize.JSONB,
|
||||||
|
defaultValue: {
|
||||||
|
owner: [],
|
||||||
|
maintainer: [],
|
||||||
|
guest: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
deleted: {
|
||||||
|
type: Sequelize.BOOLEAN,
|
||||||
|
defaultValue: false
|
||||||
|
},
|
||||||
|
created_at: {
|
||||||
|
type: Sequelize.DATE,
|
||||||
|
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
|
||||||
|
},
|
||||||
|
updated_at: {
|
||||||
|
type: Sequelize.DATE,
|
||||||
|
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
timestamps: false
|
||||||
|
})
|
||||||
|
|
||||||
|
return User
|
||||||
|
}
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
const db = require('../../db/database')
|
||||||
|
|
||||||
|
// const Op = db.Sequelize.Op
|
||||||
|
|
||||||
|
class TaskModel {
|
||||||
|
async create (req) {
|
||||||
|
console.log(req)
|
||||||
|
return db.tasks.create(req)
|
||||||
|
}
|
||||||
|
|
||||||
|
async update (req) {
|
||||||
|
const ret = await db.tasks.update(
|
||||||
|
req,
|
||||||
|
{
|
||||||
|
where: {}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateByID (req, id) {
|
||||||
|
const ret = await db.tasks.update(
|
||||||
|
req,
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
id: id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateByAttr (req, attr, value) {
|
||||||
|
const whereObj = {}
|
||||||
|
const attrList = attr.split('-')
|
||||||
|
const valueList = value.split('-')
|
||||||
|
attrList.forEach((key, idx) => {
|
||||||
|
whereObj[key] = valueList[idx]
|
||||||
|
})
|
||||||
|
|
||||||
|
const ret = await db.tasks.update(
|
||||||
|
req,
|
||||||
|
{
|
||||||
|
where: whereObj
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async clearDeleted () {
|
||||||
|
const ret = await db.tasks.delete(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
deleted: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async getByID (id) {
|
||||||
|
const ret = await db.tasks.findAll(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
id: id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async getByName (name) {
|
||||||
|
const ret = await db.tasks.findAll(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
name: name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async getByAttr (attr, value) {
|
||||||
|
const whereObj = {}
|
||||||
|
const attrList = attr.split('-')
|
||||||
|
const valueList = value.split('-')
|
||||||
|
attrList.forEach((key, idx) => {
|
||||||
|
whereObj[key] = valueList[idx]
|
||||||
|
})
|
||||||
|
|
||||||
|
const ret = await db.tasks.findAll(
|
||||||
|
{
|
||||||
|
where: whereObj
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async getAll () {
|
||||||
|
const ret = await db.tasks.findAll()
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default TaskModel
|
||||||
@@ -4,11 +4,7 @@ const Op = db.Sequelize.Op
|
|||||||
|
|
||||||
class CollectionModel {
|
class CollectionModel {
|
||||||
async create (req) {
|
async create (req) {
|
||||||
return db.collections.create({
|
return db.collections.create(req)
|
||||||
name: req.name,
|
|
||||||
parent: req.parent,
|
|
||||||
size: req.size
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async update (req, id) {
|
async update (req, id) {
|
||||||
@@ -23,14 +19,26 @@ class CollectionModel {
|
|||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
async clearDeleted () {
|
async clearDeleted (controllerID) {
|
||||||
const ret = await db.collections.delete(
|
let ret
|
||||||
{
|
if (controllerID == null) {
|
||||||
where: {
|
ret = await db.collections.destroy(
|
||||||
deleted: true
|
{
|
||||||
|
where: {
|
||||||
|
deleted: true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
)
|
||||||
)
|
} else {
|
||||||
|
ret = await db.collections.destroy(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
controller_id: controllerID,
|
||||||
|
deleted: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,14 +53,26 @@ class CollectionModel {
|
|||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
async getByName (name) {
|
async getByName (name, controllerID) {
|
||||||
const ret = await db.collections.findAll(
|
let ret
|
||||||
{
|
if (controllerID == null) {
|
||||||
where: {
|
ret = await db.collections.findAll(
|
||||||
name: name
|
{
|
||||||
|
where: {
|
||||||
|
name: name
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
)
|
||||||
)
|
} else {
|
||||||
|
ret = await db.collections.findAll(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
controller_id: controllerID,
|
||||||
|
name: name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,8 +120,19 @@ class CollectionModel {
|
|||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
async getAll () {
|
async getAll (controllerID) {
|
||||||
const ret = await db.collections.findAll()
|
let ret
|
||||||
|
if (controllerID == null) {
|
||||||
|
ret = await db.collections.findAll()
|
||||||
|
} else {
|
||||||
|
ret = await db.collections.findAll(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
controller_id: controllerID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
|
import RecordingDataRaw from './recording_data_raw'
|
||||||
|
import RecordingDataMini from './recording_data_mini'
|
||||||
const db = require('../../db/database')
|
const db = require('../../db/database')
|
||||||
|
// const RecordingDataMini = require('./recording_data_mini')
|
||||||
|
|
||||||
|
const recordingDataRaw = new RecordingDataRaw()
|
||||||
|
const recordingDataMini = new RecordingDataMini()
|
||||||
|
|
||||||
const Op = db.Sequelize.Op
|
const Op = db.Sequelize.Op
|
||||||
|
|
||||||
@@ -36,7 +42,34 @@ class RecordingDataMeta {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async clearDeleted () {
|
async clearDeleted () {
|
||||||
const ret = await db.recording_data_metas.destroy(
|
let ret = await db.recording_data_metas.findAll(
|
||||||
|
{
|
||||||
|
attributes: [
|
||||||
|
'id',
|
||||||
|
'raw_data',
|
||||||
|
'mini_data'
|
||||||
|
],
|
||||||
|
where: {
|
||||||
|
deleted: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
for (let i = 0; i < ret.length; i++) {
|
||||||
|
const meta = ret[i]
|
||||||
|
for (const channel in meta.raw_data) {
|
||||||
|
if (meta.raw_data[channel] != null) {
|
||||||
|
await recordingDataRaw.updateByIDs({ deleted: true }, meta.raw_data[channel], channel)
|
||||||
|
recordingDataRaw.clearDeleted(channel)
|
||||||
|
}
|
||||||
|
if (meta.mini_data[channel] != null) {
|
||||||
|
for (const miniID in meta.mini_data[channel]) {
|
||||||
|
await recordingDataMini.updateByIDs({ deleted: true }, meta.mini_data[channel][miniID], channel)
|
||||||
|
}
|
||||||
|
recordingDataMini.clearDeleted(channel)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ret = await db.recording_data_metas.destroy(
|
||||||
{
|
{
|
||||||
where: {
|
where: {
|
||||||
deleted: true
|
deleted: true
|
||||||
@@ -58,13 +91,74 @@ class RecordingDataMeta {
|
|||||||
parent: parentOp
|
parent: parentOp
|
||||||
},
|
},
|
||||||
order: [
|
order: [
|
||||||
['id', 'ASC']
|
['id', 'DESC']
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getCountByParent (type, parent) {
|
||||||
|
const collectionType = type + '::jsonb'
|
||||||
|
const parentOp = {}
|
||||||
|
parentOp[collectionType] = {
|
||||||
|
[Op.contains]: '[' + parent + ']'
|
||||||
|
}
|
||||||
|
const ret = await db.recording_data_metas.count(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
parent: parentOp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async getByParentWithLimit (type, parent, limit, offset, order) {
|
||||||
|
const collectionType = type + '::jsonb'
|
||||||
|
const parentOp = {}
|
||||||
|
parentOp[collectionType] = {
|
||||||
|
[Op.contains]: '[' + parent + ']'
|
||||||
|
}
|
||||||
|
const ret = await db.recording_data_metas.findAndCountAll(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
parent: parentOp
|
||||||
|
},
|
||||||
|
order: [
|
||||||
|
['id', order]
|
||||||
|
],
|
||||||
|
limit: limit,
|
||||||
|
offset: offset
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async getByAttrsParentWithLimit (type, parent, limit, offset, order, attr) {
|
||||||
|
const attrList = attr.split('-')
|
||||||
|
const orderList = order.split('-')
|
||||||
|
const collectionType = type + '::jsonb'
|
||||||
|
const parentOp = {}
|
||||||
|
parentOp[collectionType] = {
|
||||||
|
[Op.contains]: '[' + parent + ']'
|
||||||
|
}
|
||||||
|
const ret = await db.recording_data_metas.findAndCountAll(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
parent: parentOp
|
||||||
|
},
|
||||||
|
attributes: attrList,
|
||||||
|
order: [
|
||||||
|
[orderList[0], orderList[1]]
|
||||||
|
],
|
||||||
|
limit: limit,
|
||||||
|
offset: offset
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
async getByID (id) {
|
async getByID (id) {
|
||||||
const ret = await db.recording_data_metas.findAll(
|
const ret = await db.recording_data_metas.findAll(
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,6 +19,18 @@ class RecordingDataMini {
|
|||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async updateByIDs (req, id, index) {
|
||||||
|
const ret = await db[index + '_recording_data_minis'].update(
|
||||||
|
req,
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
id: id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
async clearDeleted (index) {
|
async clearDeleted (index) {
|
||||||
const ret = await db[index + '_recording_data_minis'].destroy(
|
const ret = await db[index + '_recording_data_minis'].destroy(
|
||||||
{
|
{
|
||||||
@@ -57,6 +69,19 @@ class RecordingDataMini {
|
|||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getByIDs (id, index) {
|
||||||
|
const _id = JSON.parse('[' + id + ']')
|
||||||
|
const ret = await db[index + '_recording_data_minis'].findAllWithStream(
|
||||||
|
{
|
||||||
|
batchSize: 1000,
|
||||||
|
where: {
|
||||||
|
id: _id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
async getMeanDataByID (id, index) {
|
async getMeanDataByID (id, index) {
|
||||||
const ret = await db[index + '_recording_data_minis'].findAllWithStream(
|
const ret = await db[index + '_recording_data_minis'].findAllWithStream(
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
const db = require('../../db/database')
|
const db = require('../../db/database')
|
||||||
|
const sequelize = require('sequelize')
|
||||||
|
|
||||||
class RecordingDataRaw {
|
class RecordingDataRaw {
|
||||||
async create (req, index) {
|
async create (req, index) {
|
||||||
@@ -19,6 +20,23 @@ class RecordingDataRaw {
|
|||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async updateSdData (req, id, index) {
|
||||||
|
const ret = await db.sequelize.query(`UPDATE "public"."${index}_recording_data_raws" SET sd_data = sd_data || '${req.data}' WHERE id = ${String(id)}`)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateByIDs (req, id, index) {
|
||||||
|
const ret = await db[index + '_recording_data_raws'].update(
|
||||||
|
req,
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
id: id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
async clearDeleted (index) {
|
async clearDeleted (index) {
|
||||||
const ret = await db[index + '_recording_data_raws'].destroy(
|
const ret = await db[index + '_recording_data_raws'].destroy(
|
||||||
{
|
{
|
||||||
@@ -57,6 +75,19 @@ class RecordingDataRaw {
|
|||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getByIDs (id, index) {
|
||||||
|
const _id = JSON.parse('[' + id + ']')
|
||||||
|
const ret = await db[index + '_recording_data_raws'].findAllWithStream(
|
||||||
|
{
|
||||||
|
batchSize: 1000,
|
||||||
|
where: {
|
||||||
|
id: _id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
async getDataByID (id, index) {
|
async getDataByID (id, index) {
|
||||||
const ret = await db[index + '_recording_data_raws'].findAllWithStream(
|
const ret = await db[index + '_recording_data_raws'].findAllWithStream(
|
||||||
{
|
{
|
||||||
@@ -85,6 +116,23 @@ class RecordingDataRaw {
|
|||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getByAttrIDs (id, attr, index) {
|
||||||
|
const attrList = attr.split('-')
|
||||||
|
const _id = JSON.parse('[' + id + ']')
|
||||||
|
const ord = [sequelize.literal(`ARRAY_POSITION(ARRAY[${_id}]::integer[], "id")`)]
|
||||||
|
|
||||||
|
const ret = await db[index + '_recording_data_raws'].findAll(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
id: _id
|
||||||
|
},
|
||||||
|
attributes: attrList,
|
||||||
|
order: ord
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
async getByAttrParent (parent, attr, index) {
|
async getByAttrParent (parent, attr, index) {
|
||||||
const attrList = attr.split('-')
|
const attrList = attr.split('-')
|
||||||
const ret = await db[index + '_recording_data_raws'].findAll(
|
const ret = await db[index + '_recording_data_raws'].findAll(
|
||||||
|
|||||||
@@ -0,0 +1,130 @@
|
|||||||
|
const db = require('../../db/database')
|
||||||
|
|
||||||
|
// const Op = db.Sequelize.Op
|
||||||
|
|
||||||
|
class ControllerModel {
|
||||||
|
async create (req) {
|
||||||
|
console.log(req)
|
||||||
|
return db.controllers.create(req)
|
||||||
|
}
|
||||||
|
|
||||||
|
async update (req, id) {
|
||||||
|
req.updated_at = db.Sequelize.literal('CURRENT_TIMESTAMP')
|
||||||
|
if (id != null) {
|
||||||
|
const ret = await db.controllers.update(
|
||||||
|
req,
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
id: id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
} else {
|
||||||
|
const ret = await db.controllers.update(
|
||||||
|
req,
|
||||||
|
{
|
||||||
|
where: {}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateByID (req, id) {
|
||||||
|
req.updated_at = db.Sequelize.literal('CURRENT_TIMESTAMP')
|
||||||
|
const ret = await db.controllers.update(
|
||||||
|
req,
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
id: id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateByAttr (req, attr, value) {
|
||||||
|
const whereObj = {}
|
||||||
|
const attrList = attr.split('-')
|
||||||
|
const valueList = value.split('-')
|
||||||
|
attrList.forEach((key, idx) => {
|
||||||
|
whereObj[key] = valueList[idx]
|
||||||
|
})
|
||||||
|
req.updated_at = db.Sequelize.literal('CURRENT_TIMESTAMP')
|
||||||
|
const ret = await db.controllers.update(
|
||||||
|
req,
|
||||||
|
{
|
||||||
|
where: whereObj
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async clearDeleted () {
|
||||||
|
const ret = await db.controllers.delete(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
deleted: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async getByID (id) {
|
||||||
|
const ret = await db.controllers.findAll(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
id: id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async getByName (name) {
|
||||||
|
const ret = await db.controllers.findAll(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
name: name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async getByMac (mac) {
|
||||||
|
const ret = await db.controllers.findAll(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
mac_address: mac
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async getByAttr (attr, value) {
|
||||||
|
const whereObj = {}
|
||||||
|
const attrList = attr.split('-')
|
||||||
|
const valueList = value.split('-')
|
||||||
|
attrList.forEach((key, idx) => {
|
||||||
|
whereObj[key] = valueList[idx]
|
||||||
|
})
|
||||||
|
|
||||||
|
const ret = await db.controllers.findAll(
|
||||||
|
{
|
||||||
|
where: whereObj
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async getAll () {
|
||||||
|
const ret = await db.controllers.findAll()
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ControllerModel
|
||||||
@@ -0,0 +1,151 @@
|
|||||||
|
const db = require('../../db/database')
|
||||||
|
|
||||||
|
// const Op = db.Sequelize.Op
|
||||||
|
|
||||||
|
class DeviceModel {
|
||||||
|
async create (req) {
|
||||||
|
return db.devices.create({
|
||||||
|
name: req.name,
|
||||||
|
serial_number: req.serial_number,
|
||||||
|
mac_address: req.mac_address,
|
||||||
|
connect_priority: await db.devices.count()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async update (req, id) {
|
||||||
|
req.updated_at = db.Sequelize.literal('CURRENT_TIMESTAMP')
|
||||||
|
if (id != null) {
|
||||||
|
const ret = await db.devices.update(
|
||||||
|
req,
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
id: id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
} else {
|
||||||
|
const ret = await db.devices.update(
|
||||||
|
req,
|
||||||
|
{
|
||||||
|
where: {}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateByID (req, id) {
|
||||||
|
req.updated_at = db.Sequelize.literal('CURRENT_TIMESTAMP')
|
||||||
|
const ret = await db.devices.update(
|
||||||
|
req,
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
id: id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateByMac (req, mac) {
|
||||||
|
req.updated_at = db.Sequelize.literal('CURRENT_TIMESTAMP')
|
||||||
|
const ret = await db.devices.update(
|
||||||
|
req,
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
mac_address: mac
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateByAttr (req, attr, value) {
|
||||||
|
const whereObj = {}
|
||||||
|
const attrList = attr.split('-')
|
||||||
|
const valueList = value.split('-')
|
||||||
|
attrList.forEach((key, idx) => {
|
||||||
|
whereObj[key] = valueList[idx]
|
||||||
|
})
|
||||||
|
|
||||||
|
const ret = await db.devices.update(
|
||||||
|
req,
|
||||||
|
{
|
||||||
|
where: whereObj
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async clearDeleted () {
|
||||||
|
const ret = await db.devices.destroy(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
deleted: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async getByID (id) {
|
||||||
|
const ret = await db.devices.findAll(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
id: id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async getByName (name) {
|
||||||
|
const ret = await db.devices.findAll(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
name: name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async getByMac (mac) {
|
||||||
|
const ret = await db.devices.findAll(
|
||||||
|
{
|
||||||
|
where: {
|
||||||
|
mac_address: mac
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async getByAttr (attr, value) {
|
||||||
|
const attrList = attr.split('-')
|
||||||
|
const valueList = value.split('-')
|
||||||
|
const whereObj = {}
|
||||||
|
attrList.forEach((key, idx) => {
|
||||||
|
whereObj[key] = valueList[idx]
|
||||||
|
})
|
||||||
|
|
||||||
|
const ret = await db.devices.findAll(
|
||||||
|
{
|
||||||
|
where: whereObj
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
async getAll () {
|
||||||
|
const ret = await db.devices.findAll({
|
||||||
|
order: [
|
||||||
|
['connect_priority', 'ASC']
|
||||||
|
]
|
||||||
|
})
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default DeviceModel
|
||||||
@@ -17,32 +17,46 @@ export default router
|
|||||||
.get('/public/auth/get_cookie', controllers.auth.getCookie)
|
.get('/public/auth/get_cookie', controllers.auth.getCookie)
|
||||||
|
|
||||||
// collection
|
// collection
|
||||||
.post('/api/collection/create', controllers.collection.create)
|
.post('/api/file/collection/create', controllers.collection.create)
|
||||||
.get('/api/collection/get_by_id/:id', controllers.collection.getByID)
|
.post('/api/file/collection/update/:id', controllers.collection.update)
|
||||||
.get('/api/collection/get_by_name/:name', controllers.collection.getByName)
|
.get('/api/file/collection/clear_deleted/:controller_id', controllers.collection.clearDeleted)
|
||||||
.get('/api/collection/get_by_parent/:type/:parent', controllers.collection.getByParent)
|
.get('/api/file/collection/get_by_id/:id', controllers.collection.getByID)
|
||||||
.get('/api/collection/get_by_parent_name/:type/:parent/:name', controllers.collection.getByParentName)
|
.get('/api/file/collection/get_by_name/:name/:controller_id', controllers.collection.getByName)
|
||||||
.get('/api/collection/get/all', controllers.collection.getAll)
|
.get('/api/file/collection/get_by_parent/:type/:parent', controllers.collection.getByParent)
|
||||||
|
.get('/api/file/collection/get_by_parent_name/:type/:parent/:name', controllers.collection.getByParentName)
|
||||||
|
.get('/api/file/collection/get/all/:controller_id', controllers.collection.getAll)
|
||||||
|
|
||||||
|
.get('/api/file/collection/get_by_name/:name', controllers.collection.getByName)
|
||||||
|
.get('/api/file/collection/get/all', controllers.collection.getAll)
|
||||||
|
.get('/api/file/collection/clear_deleted/', controllers.collection.clearDeleted)
|
||||||
|
|
||||||
// meta
|
// meta
|
||||||
.post('/api/file/meta/create', controllers.recordingDataMeta.create)
|
.post('/api/file/meta/create', controllers.recordingDataMeta.create)
|
||||||
.post('/api/file/meta/update/:id', controllers.recordingDataMeta.update)
|
.post('/api/file/meta/update/:id', controllers.recordingDataMeta.update)
|
||||||
.get('/api/file/meta/clear_deleted/:id', controllers.recordingDataMeta.clearDeleted)
|
.get('/api/file/meta/clear_deleted/', controllers.recordingDataMeta.clearDeleted)
|
||||||
.get('/api/file/meta/get_by_name/:name', controllers.recordingDataMeta.getByName)
|
.get('/api/file/meta/get_by_name/:name', controllers.recordingDataMeta.getByName)
|
||||||
.get('/api/file/meta/get_by_uuid/:uuid', controllers.recordingDataMeta.getByUUID)
|
.get('/api/file/meta/get_by_uuid/:uuid', controllers.recordingDataMeta.getByUUID)
|
||||||
.get('/api/file/meta/get_by_id/:id', controllers.recordingDataMeta.getByID)
|
.get('/api/file/meta/get_by_id/:id', controllers.recordingDataMeta.getByID)
|
||||||
.get('/api/file/meta/get_by_path/:path', controllers.recordingDataMeta.getByPath)
|
.get('/api/file/meta/get_by_path/:path', controllers.recordingDataMeta.getByPath)
|
||||||
.get('/api/file/meta/get_by_parent/:type/:parent', controllers.recordingDataMeta.getByParent)
|
.get('/api/file/meta/get_by_parent/:type/:parent', controllers.recordingDataMeta.getByParent)
|
||||||
|
.get('/api/file/meta/get_count_by_parent/:type/:parent', controllers.recordingDataMeta.getCountByParent)
|
||||||
|
.get('/api/file/meta/get_by_parent_with_limit/:type/:parent/:limit/:offset/:order', controllers.recordingDataMeta.getByParentWithLimit)
|
||||||
|
.get('/api/file/meta/get_by_attr_parent_with_limit/:type/:parent/:limit/:offset/:order/:attr', controllers.recordingDataMeta.getByAttrsParentWithLimit)
|
||||||
|
|
||||||
.get('/api/file/meta/get_or_create_by_path/:path', controllers.recordingDataMeta.getOrCreateByPath)
|
.get('/api/file/meta/get_or_create_by_path/:path', controllers.recordingDataMeta.getOrCreateByPath)
|
||||||
|
.get('/api/file/meta/get/all', controllers.recordingDataMeta.getAll)
|
||||||
|
|
||||||
// raw
|
// raw
|
||||||
.post('/api/file/raw/create/:channel', controllers.recordingDataRaw.create)
|
.post('/api/file/raw/create/:channel', controllers.recordingDataRaw.create)
|
||||||
.post('/api/file/raw/update/:channel/:id', controllers.recordingDataRaw.update)
|
.post('/api/file/raw/update/:channel/:id', controllers.recordingDataRaw.update)
|
||||||
|
.post('/api/file/raw/update_sd_data/:channel/:id', controllers.recordingDataRaw.updateSdData)
|
||||||
.get('/api/file/raw/clear_deleted/:channel/:id', controllers.recordingDataRaw.clearDeleted)
|
.get('/api/file/raw/clear_deleted/:channel/:id', controllers.recordingDataRaw.clearDeleted)
|
||||||
.get('/api/file/raw/get_by_id/:channel/:id', controllers.recordingDataRaw.getByID)
|
.get('/api/file/raw/get_by_id/:channel/:id', controllers.recordingDataRaw.getByID)
|
||||||
|
.get('/api/file/raw/get_by_ids/:channel/:id', controllers.recordingDataRaw.getByIDs)
|
||||||
.get('/api/file/raw/get_data_by_id/:channel/:id', controllers.recordingDataRaw.getDataByID)
|
.get('/api/file/raw/get_data_by_id/:channel/:id', controllers.recordingDataRaw.getDataByID)
|
||||||
.get('/api/file/raw/get_by_parent/:channel/:parent', controllers.recordingDataRaw.getByParent)
|
.get('/api/file/raw/get_by_parent/:channel/:parent', controllers.recordingDataRaw.getByParent)
|
||||||
.get('/api/file/raw/get_attr_by_id/:channel/:id/:attr', controllers.recordingDataRaw.getAttrByID)
|
.get('/api/file/raw/get_attr_by_id/:channel/:id/:attr', controllers.recordingDataRaw.getAttrByID)
|
||||||
|
.get('/api/file/raw/get_attr_by_ids/:channel/:id/:attr', controllers.recordingDataRaw.getAttrByIDs)
|
||||||
.get('/api/file/raw/get_attr_by_parent/:channel/:parent/:attr', controllers.recordingDataRaw.getAttrByParent)
|
.get('/api/file/raw/get_attr_by_parent/:channel/:parent/:attr', controllers.recordingDataRaw.getAttrByParent)
|
||||||
|
|
||||||
// mini
|
// mini
|
||||||
@@ -55,3 +69,44 @@ export default router
|
|||||||
.get('/api/file/mini/get_attr_by_parent/:channel/:parent/:attr', controllers.recordingDataMini.getAttrByParent)
|
.get('/api/file/mini/get_attr_by_parent/:channel/:parent/:attr', controllers.recordingDataMini.getAttrByParent)
|
||||||
.get('/api/file/mini/random/get_by_id/:channel/:id', controllers.recordingDataMini.getRandomDataByID)
|
.get('/api/file/mini/random/get_by_id/:channel/:id', controllers.recordingDataMini.getRandomDataByID)
|
||||||
.get('/api/file/mini/mean/get_by_id/:channel/:id', controllers.recordingDataMini.getMeanDataByID)
|
.get('/api/file/mini/mean/get_by_id/:channel/:id', controllers.recordingDataMini.getMeanDataByID)
|
||||||
|
|
||||||
|
// device
|
||||||
|
.post('/api/device/create', controllers.device.create)
|
||||||
|
.post('/api/device/update/:id', controllers.device.update)
|
||||||
|
.post('/api/device/update/all', controllers.device.update)
|
||||||
|
.post('/api/device/update_by_id/:id', controllers.device.updateByID)
|
||||||
|
.post('/api/device/update_by_mac/:mac', controllers.device.updateByMac)
|
||||||
|
.post('/api/device/update_by_attr/:attr/:value', controllers.device.updateByAttr)
|
||||||
|
.get('/api/device/clear_deleted/:id', controllers.device.clearDeleted)
|
||||||
|
.get('/api/device/get_by_mac/:mac', controllers.device.getByMac)
|
||||||
|
.get('/api/device/get_by_attr/:attr/:value', controllers.device.getByAttr)
|
||||||
|
.get('/api/device/get/all', controllers.device.getAll)
|
||||||
|
|
||||||
|
.post('/api/device/update_by_id/:id', controllers.device.updateByID)
|
||||||
|
.post('/api/device/update', controllers.device.update)
|
||||||
|
|
||||||
|
// controller
|
||||||
|
.post('/api/controller/create', controllers.controller.create)
|
||||||
|
.post('/api/controller/update/:id', controllers.controller.update)
|
||||||
|
.post('/api/controller/update/all', controllers.controller.update)
|
||||||
|
.post('/api/controller/update_by_attr/:attr/:value', controllers.controller.updateByAttr)
|
||||||
|
.get('/api/controller/get_by_mac/:mac', controllers.controller.getByMac)
|
||||||
|
.get('/api/controller/get_by_attr/:attr/:value', controllers.controller.getByAttr)
|
||||||
|
.get('/api/controller/get/all', controllers.controller.getAll)
|
||||||
|
|
||||||
|
.post('/api/controller/update_by_id/:id', controllers.controller.updateByID)
|
||||||
|
.post('/api/controller/update', controllers.controller.update)
|
||||||
|
|
||||||
|
// task
|
||||||
|
.post('/api/task/create', controllers.task.create)
|
||||||
|
.post('/api/task/update/:id', controllers.task.update)
|
||||||
|
.post('/api/task/update_by_attr/:attr/:value', controllers.task.updateByAttr)
|
||||||
|
.post('/api/task/update/all', controllers.task.update)
|
||||||
|
.get('/api/task/get_by_id/:id', controllers.task.getByID)
|
||||||
|
.get('/api/task/get_by_attr/:attr/:value', controllers.task.getByAttr)
|
||||||
|
.get('/api/task/get/all', controllers.task.getAll)
|
||||||
|
|
||||||
|
.post('/api/task/update', controllers.task.update)
|
||||||
|
.post('/api/task/update_by_id/:id', controllers.task.updateByID)
|
||||||
|
// analyze
|
||||||
|
.post('/api/analysis/spike_detect', controllers.analysis.spikeDetect)
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# Elite: 53
|
||||||
|
# Neulive: 101 or 95
|
||||||
|
ssh -NL 54321:localhost:5432 pi@192.168.2.1
|
||||||
Reference in New Issue
Block a user