Compare commits

...

2 Commits

Author SHA1 Message Date
Jordan Hsu 14f987a49d [add] get meta all api 2022-01-26 16:24:08 +08:00
Jordan Hsu 074e163c95 [add] trigger raw & meta download 2022-01-26 10:24:00 +08:00
9 changed files with 210 additions and 2 deletions
+28
View File
@@ -0,0 +1,28 @@
import RecordingMeta from '../../../models/file/bps_recording_meta'
import TriggerRaw from '../../../models/file/bps_trigger_raw'
const recordingMeta = new RecordingMeta()
const triggerRaw = new TriggerRaw()
export const getMetaByUUID = async (ctx, next) => {
const uuid = ctx.params.uuid
const result = await recordingMeta.getMetaByUUID(uuid)
ctx.body = result
next()
}
export const getMetaAll = async (ctx, next) => {
const result = await recordingMeta.getMetaAll()
ctx.body = result
next()
}
export const getTriggerRawByUUID = async (ctx, next) => {
const parent_uuid = ctx.params.parent_uuid
const result = await triggerRaw.getDataByUUID(parent_uuid)
ctx.body = result
next()
}
+3 -1
View File
@@ -10,6 +10,7 @@ import * as recordingDataRaw from './file/recording_data_raw'
import * as recordingDataMini from './file/recording_data_mini'
import * as analysis from './analysis'
import * as sdCard from './file/sd_card'
import * as trigger from './file/trigger'
export default {
upload,
@@ -23,5 +24,6 @@ export default {
recordingDataRaw,
recordingDataMini,
analysis,
sdCard
sdCard,
trigger,
}
+2
View File
@@ -40,6 +40,8 @@ for (let i = 256; i < 288; i++) {
for (let i = 256; i < 288; i++) {
db[i + '_recording_data_minis'] = require('./schema/recording_data_mini.model')(sequelize, Sequelize, i)
}
db.recording_meta = require('./schema/bps_recording_meta.model')(sequelize, Sequelize)
db.trigger_raw = require('./schema/bps_trigger_raw.model')(sequelize, Sequelize)
db.sequelize.sync()
+67
View File
@@ -0,0 +1,67 @@
module.exports = (sequelize, Sequelize) => {
const RecordingMeta = sequelize.define('bps_recording_meta', {
uuid: {
type: Sequelize.STRING,
defaultValue: '',
primaryKey: true
},
name: {
type: Sequelize.STRING
},
folder_id: {
type: Sequelize.INTEGER,
defaultValue: -1
},
task_uuid: {
type: Sequelize.STRING,
defaultValue: ''
},
device: {
type: Sequelize.JSONB,
defaultValue: {}
},
description: {
type: Sequelize.STRING,
defaultValue: ''
},
size: {
type: Sequelize.INTEGER,
defaultValue: -1
},
time_duration: {
type: Sequelize.STRING,
defaultValue: '0'
},
start_time: {
type: Sequelize.STRING,
defaultValue: '-1'
},
end_time: {
type: Sequelize.STRING,
defaultValue: '-1'
},
deleted: {
type: Sequelize.BOOLEAN,
defaultValue: false
},
tag: {
type: Sequelize.STRING,
defaultValue: '-1'
},
parameter_set: {
type: Sequelize.JSONB,
defaultValue: {}
},
create_date: {
type: Sequelize.DATE,
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
},
},
{
timestamps: false
}
)
return RecordingMeta
}
+30
View File
@@ -0,0 +1,30 @@
module.exports = (sequelize, Sequelize) => {
const TriigerDataRaw = sequelize.define('bps_trigger_raw', {
channel: {
type: Sequelize.INTEGER,
defaultValue: -1
},
parent_uuid: {
type: Sequelize.STRING,
defaultValue: ''
},
data: {
type: Sequelize.TEXT,
defaultValue: ''
},
start_time: {
type: Sequelize.STRING,
defaultValue: '-1'
},
end_time: {
type: Sequelize.STRING,
defaultValue: '-1'
},
},
{
freezeTableName: true
}
)
return TriigerDataRaw
}
+28
View File
@@ -0,0 +1,28 @@
const db = require('../../db/database')
const Op = db.Sequelize.Op
class RecordingMeta {
async getMetaByUUID (uuid) {
const ret = await db.recording_meta.findAll(
{
where: {
uuid: uuid
}
}
)
return ret
}
async getMetaAll () {
const ret = await db.recording_meta.findAll({
order: [
['start_time', 'DESC']
]
})
return ret
}
}
export default RecordingMeta
+37
View File
@@ -0,0 +1,37 @@
const db = require('../../db/database')
const { Transform } = require("stream")
class TriggerRaw {
async getDataByUUID (parent_uuid) {
const ret = await db.trigger_raw.findAllWithStream(
{
where: {
parent_uuid: parent_uuid
},
attributes: [
'data'
],
}
)
const transformer = new Transform({
transform(chunk, encoding, callback) {
const chunkDataStr = chunk.toString('utf8')
// replace: ref https://dmitripavlutin.com/replace-all-string-occurrences-javascript/#2-replace-with-a-global-regular-expression
// slice: remove last ','
const transformDataArr = JSON.parse(chunkDataStr)[0].data.replace(/[@#$]/g, '').slice(0, -1).split(',')
const step = 3
let transformData = ''
for (let startPos = 0; startPos < transformDataArr.length; startPos += step) {
// array chunking algo. comparison: https://www.better.dev/javascript-algorithms-array-chunking
transformData += transformDataArr.slice(startPos, startPos + step).join() + '\n' // join: https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array/join
}
callback(null, transformData)
},
})
return ret.pipe(transformer)
}
}
export default TriggerRaw
+3 -1
View File
@@ -3,6 +3,7 @@ import meta from './meta'
import mini from './mini'
import raw from './raw'
import sdcard from './sdcard'
import trigger from './trigger'
export default function (_prefix) {
const prefix = _prefix + '/file'
@@ -11,6 +12,7 @@ export default function (_prefix) {
...meta(prefix),
...mini(prefix),
...raw(prefix),
...sdcard(prefix)
...sdcard(prefix),
...trigger(prefix)
]
}
+12
View File
@@ -0,0 +1,12 @@
import controllers from '../../../controllers'
// '/api/file/trigger'
export default function (_prefix) {
const prefix = _prefix + '/trigger'
return [
['GET', prefix + '/get_meta_by_uuid/:uuid', controllers.trigger.getMetaByUUID],
['GET', prefix + '/get/all', controllers.trigger.getMetaAll],
['GET', prefix + '/get_raw_by_uuid/:parent_uuid', controllers.trigger.getTriggerRawByUUID],
]
}