update
This commit is contained in:
@ -144,117 +144,117 @@ class GpsTracksModels {
|
||||
})
|
||||
}
|
||||
|
||||
// static bundleCreate2(logs = {}, rltm = {}) {
|
||||
// // console.log(rltm.device_id + " : Start bundleCreate2")
|
||||
// return new Promise(async (resolve, reject) => {
|
||||
// try {
|
||||
// const conn = await MysqlHelpers.createConnection()
|
||||
// await MysqlHelpers.createTrx(conn)
|
||||
// // console.log("createTrx : " + rltm.device_id)
|
||||
static bundleCreate2(logs = {}, rltm = {}) {
|
||||
// console.log(rltm.device_id + " : Start bundleCreate2")
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
const conn = await MysqlHelpers.createConnection()
|
||||
await MysqlHelpers.createTrx(conn)
|
||||
// console.log("createTrx : " + rltm.device_id)
|
||||
|
||||
// let rltmLength = Object.keys(rltm).length
|
||||
// let resLogs = undefined
|
||||
let rltmLength = Object.keys(rltm).length
|
||||
let resLogs = undefined
|
||||
|
||||
// if (Object.keys(logs).length > 0) {
|
||||
// resLogs = await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `INSERT INTO t_gps_tracks SET ?;`,
|
||||
// [logs],
|
||||
// )
|
||||
// // console.log("insert t_gps_tracks : " + rltm.device_id)
|
||||
if (Object.keys(logs).length > 0) {
|
||||
resLogs = await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`INSERT INTO t_gps_tracks SET ?;`,
|
||||
[logs],
|
||||
)
|
||||
// console.log("insert t_gps_tracks : " + rltm.device_id)
|
||||
|
||||
// if (logs.action == "location") {
|
||||
// const date = logs.crt_d
|
||||
// const mm = moment.unix(date).format("MM")
|
||||
// const yy = moment.unix(date).format("YY")
|
||||
// logs.id = resLogs.insertId
|
||||
if (logs.action == "location") {
|
||||
const date = logs.crt_d
|
||||
const mm = moment.unix(date).format("MM")
|
||||
const yy = moment.unix(date).format("YY")
|
||||
logs.id = resLogs.insertId
|
||||
|
||||
// try {
|
||||
// await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `
|
||||
// INSERT INTO tracks_${yy}${mm}
|
||||
// SET ?
|
||||
// `,
|
||||
// [logs],
|
||||
// )
|
||||
// } catch (error) {
|
||||
// console.log(error)
|
||||
// fs.appendFileSync(
|
||||
// path.join(__dirname, `error_data_log.txt`),
|
||||
// JSON.stringify(logs) + `\n`,
|
||||
// )
|
||||
// }
|
||||
// // console.log("insert tracks_${yy}${mm} : " + rltm.device_id)
|
||||
// }
|
||||
// }
|
||||
try {
|
||||
await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`
|
||||
INSERT INTO tracks_${yy}${mm}
|
||||
SET ?
|
||||
`,
|
||||
[logs],
|
||||
)
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
fs.appendFileSync(
|
||||
path.join(__dirname, `error_data_log.txt`),
|
||||
JSON.stringify(logs) + `\n`,
|
||||
)
|
||||
}
|
||||
// console.log("insert tracks_${yy}${mm} : " + rltm.device_id)
|
||||
}
|
||||
}
|
||||
|
||||
// if (rltmLength > 0 && typeof resLogs !== "undefined")
|
||||
// rltm.master_id = resLogs.insertId
|
||||
// if (
|
||||
// rltmLength > 0 &&
|
||||
// rltm.latitude !== null &&
|
||||
// rltm.longitude !== null
|
||||
// ) {
|
||||
// let devices = await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.device_id = ?`,
|
||||
// [rltm.device_id],
|
||||
// )
|
||||
// if (devices.length > 1)
|
||||
// await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `DELETE from t_gps_tracks_rltm WHERE device_id = ?;`,
|
||||
// [rltm.device_id],
|
||||
// )
|
||||
if (rltmLength > 0 && typeof resLogs !== "undefined")
|
||||
rltm.master_id = resLogs.insertId
|
||||
if (
|
||||
rltmLength > 0 &&
|
||||
rltm.latitude !== null &&
|
||||
rltm.longitude !== null
|
||||
) {
|
||||
let devices = await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.device_id = ?`,
|
||||
[rltm.device_id],
|
||||
)
|
||||
if (devices.length > 1)
|
||||
await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`DELETE from t_gps_tracks_rltm WHERE device_id = ?;`,
|
||||
[rltm.device_id],
|
||||
)
|
||||
|
||||
// if (rltm.vhc_id != 0) {
|
||||
// let vhcs = await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.vhc_id = ?`,
|
||||
// [rltm.vhc_id],
|
||||
// )
|
||||
// if (vhcs.length > 1)
|
||||
// await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `DELETE from t_gps_tracks_rltm WHERE vhc_id = ?;`,
|
||||
// [rltm.vhc_id],
|
||||
// )
|
||||
// }
|
||||
if (rltm.vhc_id != 0) {
|
||||
let vhcs = await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.vhc_id = ?`,
|
||||
[rltm.vhc_id],
|
||||
)
|
||||
if (vhcs.length > 1)
|
||||
await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`DELETE from t_gps_tracks_rltm WHERE vhc_id = ?;`,
|
||||
[rltm.vhc_id],
|
||||
)
|
||||
}
|
||||
|
||||
// if (rltm.drv_id != 0) {
|
||||
// let drvs = await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.drv_id = ?`,
|
||||
// [rltm.drv_id],
|
||||
// )
|
||||
// if (drvs.length > 1)
|
||||
// await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `DELETE from t_gps_tracks_rltm WHERE drv_id = ?;`,
|
||||
// [rltm.drv_id],
|
||||
// )
|
||||
// }
|
||||
if (rltm.drv_id != 0) {
|
||||
let drvs = await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.drv_id = ?`,
|
||||
[rltm.drv_id],
|
||||
)
|
||||
if (drvs.length > 1)
|
||||
await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`DELETE from t_gps_tracks_rltm WHERE drv_id = ?;`,
|
||||
[rltm.drv_id],
|
||||
)
|
||||
}
|
||||
|
||||
// await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `INSERT INTO t_gps_tracks_rltm SET ? ON DUPLICATE KEY UPDATE ?;`,
|
||||
// [rltm, rltm],
|
||||
// )
|
||||
// }
|
||||
await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`INSERT INTO t_gps_tracks_rltm SET ? ON DUPLICATE KEY UPDATE ?;`,
|
||||
[rltm, rltm],
|
||||
)
|
||||
}
|
||||
|
||||
// await MysqlHelpers.commit(conn)
|
||||
// // console.log("Commit bundleCreate2 : " + rltm.device_id)
|
||||
// resolve({
|
||||
// type: "success",
|
||||
// result: resLogs,
|
||||
// })
|
||||
// } catch (err) {
|
||||
// console.log("ERROR bundleCreate2 : " + rltm.device_id)
|
||||
// reject(err)
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
await MysqlHelpers.commit(conn)
|
||||
// console.log("Commit bundleCreate2 : " + rltm.device_id)
|
||||
resolve({
|
||||
type: "success",
|
||||
result: resLogs,
|
||||
})
|
||||
} catch (err) {
|
||||
console.log("ERROR bundleCreate2 : " + rltm.device_id)
|
||||
reject(err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/** MUTEX ESPECIALLY FOR RLTM */
|
||||
|
||||
@ -391,149 +391,149 @@ class GpsTracksModels {
|
||||
|
||||
/** MUTEX FOR ALL REQUEST */
|
||||
|
||||
static bundleCreate2(logs = {}, rltm = {}) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
let lock = null
|
||||
let conn = null
|
||||
try {
|
||||
conn = await MysqlHelpers.createConnection()
|
||||
await MysqlHelpers.createTrx(conn)
|
||||
// static bundleCreate2(logs = {}, rltm = {}) {
|
||||
// return new Promise(async (resolve, reject) => {
|
||||
// let lock = null
|
||||
// let conn = null
|
||||
// try {
|
||||
// conn = await MysqlHelpers.createConnection()
|
||||
// await MysqlHelpers.createTrx(conn)
|
||||
|
||||
let rltmLength = Object.keys(rltm).length
|
||||
let resLogs = undefined
|
||||
// let rltmLength = Object.keys(rltm).length
|
||||
// let resLogs = undefined
|
||||
|
||||
if (Object.keys(logs).length > 0) {
|
||||
resLogs = await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`INSERT INTO t_gps_tracks SET ?;`,
|
||||
[logs],
|
||||
)
|
||||
// if (Object.keys(logs).length > 0) {
|
||||
// resLogs = await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `INSERT INTO t_gps_tracks SET ?;`,
|
||||
// [logs],
|
||||
// )
|
||||
|
||||
let trackLock = null
|
||||
// let trackLock = null
|
||||
|
||||
try {
|
||||
if (logs.action == "location") {
|
||||
// try {
|
||||
// if (logs.action == "location") {
|
||||
|
||||
trackLock = await rltmMutex.lock(
|
||||
`tracks_insert:${logs.device_id}`,
|
||||
{
|
||||
duration: 90000,
|
||||
maxWait: 90000,
|
||||
}
|
||||
)
|
||||
// trackLock = await rltmMutex.lock(
|
||||
// `tracks_insert:${logs.device_id}`,
|
||||
// {
|
||||
// duration: 90000,
|
||||
// maxWait: 90000,
|
||||
// }
|
||||
// )
|
||||
|
||||
const date = logs.crt_d
|
||||
const mm = moment.unix(date).format("MM")
|
||||
const yy = moment.unix(date).format("YY")
|
||||
// const date = logs.crt_d
|
||||
// const mm = moment.unix(date).format("MM")
|
||||
// const yy = moment.unix(date).format("YY")
|
||||
|
||||
logs.id = resLogs.insertId
|
||||
// logs.id = resLogs.insertId
|
||||
|
||||
await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`
|
||||
INSERT INTO tracks_${yy}${mm}
|
||||
SET ?
|
||||
`,
|
||||
[logs]
|
||||
)
|
||||
}
|
||||
} finally {
|
||||
if (trackLock) {
|
||||
await rltmMutex.unlock(trackLock)
|
||||
}
|
||||
// conn.release();
|
||||
}
|
||||
}
|
||||
// await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `
|
||||
// INSERT INTO tracks_${yy}${mm}
|
||||
// SET ?
|
||||
// `,
|
||||
// [logs]
|
||||
// )
|
||||
// }
|
||||
// } finally {
|
||||
// if (trackLock) {
|
||||
// await rltmMutex.unlock(trackLock)
|
||||
// }
|
||||
// // conn.release();
|
||||
// }
|
||||
// }
|
||||
|
||||
if (rltmLength > 0 && typeof resLogs !== "undefined")
|
||||
rltm.master_id = resLogs.insertId
|
||||
// if (rltmLength > 0 && typeof resLogs !== "undefined")
|
||||
// rltm.master_id = resLogs.insertId
|
||||
|
||||
if (
|
||||
rltmLength > 0 &&
|
||||
rltm.latitude !== null &&
|
||||
rltm.longitude !== null
|
||||
) {
|
||||
// === KUNCI DI SINI ===
|
||||
// Lock per device_id supaya SELECT-DELETE-INSERT untuk
|
||||
// device yang sama tidak berjalan bersamaan dari request/worker
|
||||
// lain. Inilah yang tadinya memicu ER_DUP_ENTRY dan
|
||||
// "Lock wait timeout" karena banyak transaksi menumpuk
|
||||
// menunggu baris yang sama.
|
||||
lock = await rltmMutex.lock(`t_gps_tracks_rltm:${rltm.device_id}`, {
|
||||
duration: 90000, // maksimal lock dipegang 5 detik
|
||||
maxWait: 90000, // menunggu lock maksimal 10 detik lalu error
|
||||
})
|
||||
// if (
|
||||
// rltmLength > 0 &&
|
||||
// rltm.latitude !== null &&
|
||||
// rltm.longitude !== null
|
||||
// ) {
|
||||
// // === KUNCI DI SINI ===
|
||||
// // Lock per device_id supaya SELECT-DELETE-INSERT untuk
|
||||
// // device yang sama tidak berjalan bersamaan dari request/worker
|
||||
// // lain. Inilah yang tadinya memicu ER_DUP_ENTRY dan
|
||||
// // "Lock wait timeout" karena banyak transaksi menumpuk
|
||||
// // menunggu baris yang sama.
|
||||
// lock = await rltmMutex.lock(`t_gps_tracks_rltm:${rltm.device_id}`, {
|
||||
// duration: 90000, // maksimal lock dipegang 5 detik
|
||||
// maxWait: 90000, // menunggu lock maksimal 10 detik lalu error
|
||||
// })
|
||||
|
||||
let devices = await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.device_id = ?`,
|
||||
[rltm.device_id],
|
||||
)
|
||||
if (devices.length > 1)
|
||||
await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`DELETE from t_gps_tracks_rltm WHERE device_id = ?;`,
|
||||
[rltm.device_id],
|
||||
)
|
||||
// let devices = await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.device_id = ?`,
|
||||
// [rltm.device_id],
|
||||
// )
|
||||
// if (devices.length > 1)
|
||||
// await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `DELETE from t_gps_tracks_rltm WHERE device_id = ?;`,
|
||||
// [rltm.device_id],
|
||||
// )
|
||||
|
||||
if (rltm.vhc_id != 0) {
|
||||
let vhcs = await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.vhc_id = ?`,
|
||||
[rltm.vhc_id],
|
||||
)
|
||||
if (vhcs.length > 1)
|
||||
await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`DELETE from t_gps_tracks_rltm WHERE vhc_id = ?;`,
|
||||
[rltm.vhc_id],
|
||||
)
|
||||
}
|
||||
// if (rltm.vhc_id != 0) {
|
||||
// let vhcs = await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.vhc_id = ?`,
|
||||
// [rltm.vhc_id],
|
||||
// )
|
||||
// if (vhcs.length > 1)
|
||||
// await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `DELETE from t_gps_tracks_rltm WHERE vhc_id = ?;`,
|
||||
// [rltm.vhc_id],
|
||||
// )
|
||||
// }
|
||||
|
||||
if (rltm.drv_id != 0) {
|
||||
let drvs = await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.drv_id = ?`,
|
||||
[rltm.drv_id],
|
||||
)
|
||||
if (drvs.length > 1)
|
||||
await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`DELETE from t_gps_tracks_rltm WHERE drv_id = ?;`,
|
||||
[rltm.drv_id],
|
||||
)
|
||||
}
|
||||
// if (rltm.drv_id != 0) {
|
||||
// let drvs = await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.drv_id = ?`,
|
||||
// [rltm.drv_id],
|
||||
// )
|
||||
// if (drvs.length > 1)
|
||||
// await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `DELETE from t_gps_tracks_rltm WHERE drv_id = ?;`,
|
||||
// [rltm.drv_id],
|
||||
// )
|
||||
// }
|
||||
|
||||
await MysqlHelpers.queryTrx(
|
||||
conn,
|
||||
`INSERT INTO t_gps_tracks_rltm SET ? ON DUPLICATE KEY UPDATE ?;`,
|
||||
[rltm, rltm],
|
||||
)
|
||||
}
|
||||
// await MysqlHelpers.queryTrx(
|
||||
// conn,
|
||||
// `INSERT INTO t_gps_tracks_rltm SET ? ON DUPLICATE KEY UPDATE ?;`,
|
||||
// [rltm, rltm],
|
||||
// )
|
||||
// }
|
||||
|
||||
await MysqlHelpers.commit(conn)
|
||||
// await MysqlHelpers.commit(conn)
|
||||
|
||||
resolve({
|
||||
type: "success",
|
||||
result: resLogs,
|
||||
})
|
||||
} catch (err) {
|
||||
console.log("ERROR bundleCreate2 : " + rltm.device_id)
|
||||
reject(err)
|
||||
} finally {
|
||||
// Lock selalu dilepas, baik sukses maupun gagal,
|
||||
// supaya tidak deadlock request device yang sama berikutnya.
|
||||
if (lock) {
|
||||
try {
|
||||
await rltmMutex.unlock(lock)
|
||||
} catch (unlockErr) {
|
||||
console.log("ERROR unlock mutex : " + rltm.device_id, unlockErr)
|
||||
}
|
||||
}
|
||||
conn.release(); // release connection
|
||||
}
|
||||
})
|
||||
}
|
||||
// resolve({
|
||||
// type: "success",
|
||||
// result: resLogs,
|
||||
// })
|
||||
// } catch (err) {
|
||||
// console.log("ERROR bundleCreate2 : " + rltm.device_id)
|
||||
// reject(err)
|
||||
// } finally {
|
||||
// // Lock selalu dilepas, baik sukses maupun gagal,
|
||||
// // supaya tidak deadlock request device yang sama berikutnya.
|
||||
// if (lock) {
|
||||
// try {
|
||||
// await rltmMutex.unlock(lock)
|
||||
// } catch (unlockErr) {
|
||||
// console.log("ERROR unlock mutex : " + rltm.device_id, unlockErr)
|
||||
// }
|
||||
// }
|
||||
// conn.release(); // release connection
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
|
||||
static async get2() {
|
||||
return new Promise((resolve, reject) => {
|
||||
|
||||
Reference in New Issue
Block a user