diff --git a/scanner/app.js b/scanner/app.js index b65e91a..515edd7 100644 --- a/scanner/app.js +++ b/scanner/app.js @@ -1,4 +1,8 @@ // app.js +import { + make_new_session_id, +} from './utils.js'; + App({ onLaunch() { // 展示本地存储能力 @@ -27,7 +31,8 @@ App({ }, globalData: { userInfo: null, - server_url: 'https://themblem.com' + server_url: 'https://themblem.com', + session_id: make_new_session_id(), }, get_real_ip() { diff --git a/scanner/pages/camera/camera.js b/scanner/pages/camera/camera.js index 6757923..d202c31 100644 --- a/scanner/pages/camera/camera.js +++ b/scanner/pages/camera/camera.js @@ -15,6 +15,7 @@ import { import { get_camera_rule, get_system_info, + send_event, } from '../../utils.js' import { debug, info, error } from '../../log.js' @@ -49,6 +50,7 @@ Page({ qrarc_class: "sm", qrmarkers_class: "hidden", frame_upload_in_flight: 0, + frame_upload_failed: 0, frame_upload_time_cost: 0, frame_upload_interval_ms: 2000, }, @@ -89,8 +91,6 @@ Page({ this.setData({ ai_chat_mode: options.ai_chat_mode, }); - var new_session_id = Date.now(); - getApp().globalData.session_id = new_session_id; if (options.env == 'dev') { console.log("Using dev env settings."); getApp().globalData.server_url = 'https://dev.themblem.com'; @@ -392,36 +392,30 @@ Page({ frame_upload_in_flight: this.data.frame_upload_in_flight + 1, }); var seq_num = this.data.frame_upload_seq_num.toString().padStart(3, '0'); - var fd = { + var event_data = { session_id: getApp().globalData.session_id, phone_model: getApp().globalData.phone_model, seq_num: seq_num, image_data_url: data_url, } - wx.request({ - url: "https://research.themblem.com/event/camera-frame", - method: "POST", - data: JSON.stringify(fd), - header: { - "Content-Type": "application/json", - }, - success: (res) => { - this.setData({ - frame_uploaded: this.data.frame_uploaded + 1, - frame_upload_in_flight: this.data.frame_upload_in_flight - 1, - frame_upload_time_cost: Date.now() - begin, - frame_upload_interval_ms: this.data.frame_upload_interval_ms * 2, - }); - }, - fail: (e) => { - this.log("frame upload failed", e); - this.setData({ - frame_upload_in_flight: this.data.frame_upload_in_flight - 1, - frame_upload_time_cost: Date.now() - begin, - frame_upload_interval_ms: this.data.frame_upload_interval_ms * 2, - }); - }, - }); + var success_cb = (res) => { + this.setData({ + frame_uploaded: this.data.frame_uploaded + 1, + frame_upload_in_flight: this.data.frame_upload_in_flight - 1, + frame_upload_time_cost: Date.now() - begin, + frame_upload_interval_ms: this.data.frame_upload_interval_ms * 2, + }); + } + var fail_cb = (e) => { + this.log("frame upload failed", e); + this.setData({ + frame_upload_failed: this.data.frame_upload_failed + 1, + frame_upload_in_flight: this.data.frame_upload_in_flight - 1, + frame_upload_time_cost: Date.now() - begin, + frame_upload_interval_ms: this.data.frame_upload_interval_ms * 2, + }); + } + send_event("camera-frame", event_data, success_cb, fail_cb); }, do_handle_frame(res) { if (this.busy) return; @@ -441,7 +435,8 @@ Page({ var uca1 = new Uint8ClampedArray(res.data); var uca = new Uint8ClampedArray(uca1); const data_url = data_url_from_frame(res.width, res.height, uca); - var r = frame_pre_check(res.width, res.height, uca, this.data.camera_sensitivity); + var r = frame_pre_check(res.width, res.height, uca, + this.data.camera_sensitivity) const result = r.result; this.log("frame_pre_check: ", JSON.stringify(result)); this.setData({ diff --git a/scanner/utils.js b/scanner/utils.js index 74bb1ee..ea92700 100644 --- a/scanner/utils.js +++ b/scanner/utils.js @@ -91,11 +91,30 @@ function goto_camera(redirect, opts) { }); } +function make_new_session_id() { + return `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`; +} + +function send_event(event_name, data, success_cb, fail_cb) { + wx.request({ + url: 'https://research.themblem.com/event/' + event_name, + method: 'POST', + data: JSON.stringify(data), + header: { + 'Content-Type': 'application/json', + }, + success: success_cb, + fail: fail_cb, + }); +} + module.exports = { get_system_info, get_phone_model, get_camera_rule, goto_camera, - formatTime + formatTime, + make_new_session_id, + send_event, }