history/emulator/emulator.proto

syntax = "proto3";

package jsgenerate_kb2022.history.emulator;
option go_package = "gateway/protocol/history/emulator";

import "google/api/annotations.proto";
import "adadd52b-e7a2-4fe2-9f15-356ceddbd4f6/utils/utils.proto";
// 供用戶查詢 模擬器歷史
service Emulator {
    // 查詢模擬器
    rpc Find (FindRequest) returns (FindResponse){
        option (google.api.http) = {
            get: "/api/v1/history/emulator"
        };
    }
    // 查詢日誌
    rpc FindLogger(FindLoggerRequest) returns (FindLoggerResponse){
        option (google.api.http) = {
            get: "/api/v1/history/emulator/loggers"
        };
    }
    // 查詢指定 模擬器 在指定 樂觀鎖下 的日誌
    rpc ByLocker(ByLockerRequest) returns (ByLockerResponse){
        option (google.api.http) = {
            get: "/api/v1/history/emulator/loggers/by_locker"
        };
    }
}
// 模擬器數據
message Data{
	// 模擬器唯一識別碼 和設備 id 一致
	int64 id = 1;
	// 設備 邏輯碼
	string logic = 2;
	// 設備 物理碼
	string physical = 3;
	// 模擬器 工作地址
	string addr = 4;
    // 模擬器是否已經運行
	bool started = 5;
	// 運行時間 unix
	int64 start = 6;
	// 停止時間 unix
	int64 stop = 7;

    // 設備是否已經連接到模擬器,只有在 此值爲true 時 fieldXXX 才有效
	bool connected = 15;
	// 最後連接時間 unix
	int64 connect = 16;
	// 最後掉線時間 unix
	int64 disconnect = 17;

    // 模擬器 當前 樂觀鎖
    int64 locker = 20;
    // 模擬器 當前 狀態 樂觀鎖 
    int64 last = 21;

    // 調度器 id,只有在此值非0時其它 schedulerXXX 屬性才有效
	int64 schedulerID = 30;
	// 任務 id
	int64 schedulerTask = 31;
	// 任務 來源
	uint32 schedulerSource = 32;
	// 任務 優先級
	int32 schedulerPriority = 33;
	// 任務 等級
	int32 schedulerLevel = 34;
	// 任務 目標
	repeated string schedulerTargets = 35;
	// 任務房間號
	string schedulerRoom = 36;

    // 設備安裝軟件版本號
	string fieldVersion = 40;
	// 啓動時間 uinx
	int64 fieldStartAt = 41;
	// 設備音量
	int32 fieldVolume = 42;
	// 對講開關
	bool fieldTalkie = 43;
	// 對講機參數
	string fieldTalkieOption = 44;
}
message FindRequest{
    jsgenerate_kb2022.utils.FindLimit limit = 1;
    // id not in (...)
    repeated int64 notID = 50;
    // id in 
    repeated int64 id = 2;
    // <0 查找 沒有啓動的模擬器
    // 0 忽略此參數
    // >0 查找 已經啓動的模擬器
    int32 started = 3;
    // <0 查找 沒有設備連接的模擬器
    // 0 忽略此參數
    // >0 查找 已經存在設備連接的模擬器
    int32 connected = 4;

    // 如果 >0 返回 啓動時間 unix >= start 的模擬器
    int64 afterStart = 10;
    // 如果 >0 返回 啓動時間 unix <= start 的模擬器
    int64 beforeStart = 11;
    // 如果 >0 返回 停止時間 unix >= stop 的模擬器
    int64 afterStop = 12;
    // 如果 >0 返回 停止時間 unix <= stop 的模擬器
    int64 beforeStop = 13;

    // 如果 >0 返回 連接時間 unix >= connect 的模擬器
    int64 afterConnect = 14;
    // 如果 >0 返回 連接時間 unix <= connect 的模擬器
    int64 beforeConnect = 15;
    // 如果 >0 返回 掉線時間 unix >= disconnect 的模擬器
    int64 afterDisconnect = 16;
    // 如果 >0 返回 掉線時間 unix <= disconnect 的模擬器
    int64 beforeDisconnect = 17;


    // 查找包含 這些 邏輯碼的 模擬器
    repeated string  logic = 30;
    // 查找包含 這些 物理碼的 模擬器
    repeated string physical = 31;
}
message FindResponse{
    jsgenerate_kb2022.utils.FindResult result = 1;
    repeated Data data = 2;
}

// 日誌
message Logger{
    // 唯一 id
    int64 id = 1;
    // 模擬器 id
    int64 emulator = 2 ;
    // 日誌等級,用於確定日誌重要性
	// * 1 Debug 用於 開發/測試/排錯 時使用,在寫入 Debug 日誌時,系統不會保證寫入成功
	// * 2 Info 一般信息,通常是任務執行中的一些狀態變化,比例流程任務中播放了新的音樂,會任務停止之類的通常信息
	// * 3 Warn 警告,這通常是在執行時發生了錯誤,例如一個流程任務使用了三首音頻資產,其中一個資產已經損毀無法播放,但這不會影響另外兩個資產的播放
	// * 4 Error 錯誤,系統發生了嚴重的錯誤,任務很可能無法正常執行,例如發生了網路故障,系統無法將任務推送給後端設備進行執行
    int32 level = 3;
    // 日誌創建時間 unix
    int64 createAt = 4;

    // 日誌所屬 樂觀鎖
    int64 locker = 5;
    // 日誌包含的文本信息
	string message = 6;
}
message FindLoggerRequest{
    jsgenerate_kb2022.utils.FindLimit limit = 1;
    // id not in (...)
    repeated int64 notID = 50;
    // id in 
    repeated int64 id = 2;
    // 模擬器 id in
    repeated int64 emulator = 3;
	// 日誌等級,用於確定日誌重要性
	// * 1 Debug 用於 開發/測試/排錯 時使用,在寫入 Debug 日誌時,系統不會保證寫入成功
	// * 2 Info 一般信息,通常是任務執行中的一些狀態變化,比例流程任務中播放了新的音樂,會任務停止之類的通常信息
	// * 3 Warn 警告,這通常是在執行時發生了錯誤,例如一個流程任務使用了三首音頻資產,其中一個資產已經損毀無法播放,但這不會影響另外兩個資產的播放
	// * 4 Error 錯誤,系統發生了嚴重的錯誤,任務很可能無法正常執行,例如發生了網路故障,系統無法將任務推送給後端設備進行執行
	repeated int32 level = 4;
    // 樂觀鎖 in
    repeated int64 locker = 5;

    // 如果 >0 返回 創建時間 unix >= createAt 的日誌
    int64 after = 10;
    // 如果 >0 返回 創建時間 unix <= createAt 的日誌
    int64 before = 11;
    // 如果 >0 返回 樂觀鎖 locker >= after 的日誌
    int64 afterLocker = 12;
    // 如果 >0 返回 樂觀鎖 locker <= before 的日誌
    int64 beforeLocker = 13;
}
message FindLoggerResponse{
    jsgenerate_kb2022.utils.FindResult result = 1;
    repeated Logger data = 2;
}
message ByLockerRequest{
    int64 emulator = 1;
    int64 locker = 2;
}
message ByLockerResponse{
    repeated Logger data = 1;
}