history/task/task.proto

syntax = "proto3";

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

import "google/api/annotations.proto";
import "adadd52b-e7a2-4fe2-9f15-356ceddbd4f6/utils/utils.proto";
// 供用戶查詢一些 任務 的 歷史數據
service Task {
    // 查找任務調度器
    rpc FindScheduler(FindSchedulerRequest) returns (FindSchedulerResponse){
        option (google.api.http) = {
            get: "/api/v1/history/task/schedulers"
        };
    }
    // 返回調度器的所有日誌
    rpc ByScheduler (BySchedulerRequest) returns (BySchedulerResponse){
        option (google.api.http) = {
            get: "/api/v1/history/task/loggers/by_scheduler"
        };
    }
    // 查找調度器的執行日誌
    rpc FindLogger (FindLoggerRequest) returns (FindLoggerResponse){
        option (google.api.http) = {
            get: "/api/v1/history/task/loggers"
        };
    }
}

// 調度器
message Scheduler{
    // 調度器 id
    int64 id = 1;
    // 所屬於 任務 id,此值可能重複因爲來源 source 不同的任務間 id 是不相干的故可能出現重複
    int64 task = 2 ;
    // 調度開始時間 unix
    int64 start = 3;
    // 調度結束時間 unix
    int64 stop = 4;

    // 來源
    // * 100 音頻任務 -> 流程任務
    // * 110 音頻任務 -> 檔案直播
    // * 120 音頻任務 -> 即時直播
	// * 130 音頻任務 -> 點播
    uint32 source = 5;

    // 任務優先度
    int32 priority = 8;
	// 任務級別
	int32 level = 9;

	// 任務目標 邏輯碼
	repeated string targets  = 10;
}
message FindSchedulerRequest{
    jsgenerate_kb2022.utils.FindLimit limit = 1;
    // id not in (...)
    repeated int64 notID = 50;
    // 調度器 id in 
    repeated int64 id = 2;
    // 所屬於 任務 id in
    repeated int64 task = 3;
    // 來源 in
    repeated uint32 source = 4;
    // 任務優先度
    repeated int32 priority  = 5;
    // 任務級別
    repeated int32 level = 6;

    // 如果 >0 返回 開始時間 unix >= afterStart 的調度器
    int64 afterStart = 10;
    // 如果 >0 返回 開始時間 unix <= beforeStart 的調度器
    int64 beforeStart = 11;
    // 如果 >0 返回 結束時間 unix >= afterStop 的調度器
    int64 afterStop = 12;
    // 如果 >0 返回 結束時間 unix <= beforeStop 的調度器
    int64 beforeStop = 13;

    // 如果爲非空數組 只查找包含這些 邏輯碼 的調度器
    repeated string targets = 20;
}
message FindSchedulerResponse{
    jsgenerate_kb2022.utils.FindResult result = 1;
    repeated Scheduler data = 2;
}

message Logger{
	// 日誌 id
	int64 id = 1;
	// 日誌所屬 調度器 id,用於過濾具體哪次任務執行的日誌
	int64 scheduler = 2;

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

	// 日誌包含的文本信息
	string message = 5;
}
message BySchedulerRequest{
    int64 scheduler=1;
}
message BySchedulerResponse{
    repeated Logger data = 1;
}
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 scheduler = 3;
    // 日誌等級 in
    repeated int32 level = 4;

    // 如果 >0 返回 創建時間 unix >= createAt 的日誌
    int64 after = 10;
    // 如果 >0 返回 創建時間 unix <= createAt 的日誌
    int64 before = 11;
}
message FindLoggerResponse{
    jsgenerate_kb2022.utils.FindResult result = 1;
    repeated Logger data = 2;
}