syntax = "proto3";

package gateway.data.rawlog;

// 描述app的平台
enum Platform {
    IOS = 0;  //ios　　
    Android = 1;  // android
    Web = 2;      // web
    Unknown = -1;  //unknown
};


message UID {
    enum Type {   // 出于安全的考虑,部分手机上使用的是md5过的imei号;
                  NONE = 0;
                  MD5 = 1;
    };
    int64 user_id = 1;  // 用户ID
    Type type = 2;  // 如果是MD5,此时device_id和mac_id都是MD5过的
    string device_id = 3; // based imei on android or idfa on ios
    string wuid = 5;       // Web user id, 只有Web用户才有
    string refer_uid = 7;  // web user, 来源的uid
    string user_name = 8;      // 用户名
    string user_type = 9;      // 是否登录(游客)
    int64 bucket_id = 10;      // 用户bucket id
    bool is_super_account = 11;      // 是否超级公共账号
    string wid = 12; //微信相关的MD5ID
};


message AppMeta {
    // App相关配置
    string app_id = 1;
    string build_number = 2; // 发布号是后台区分版本的唯一id，不同平台，不同版本都需要保证全局的唯一性
    string bundle_version = 3; // app_version
    string distribution_channel = 4; // 分发渠道,是否修改为枚举?
    string imei = 6;           // md5后的imei号
    string mac_id = 7;         // MacID
    string android_id = 8;     // 安卓系统用户id
    string android_advertising_id = 9;     // 安卓系统用户谷歌广告id 201805 安卓4660版本新增

    // 设备相关的元数据
    string device_name = 11;     // 设备名
    string brand = 12;           // 机器的品牌
    //optional string screen_resolution = 13; // 屏幕分辨率
    string screen_density = 14;    // 屏幕密度,每英寸有多少个显示点
    int32  processor_count = 15;  // 处理器核数
    string physical_memory = 16;  // 机器内存, 单位MB
    int32 screen_width = 17;      // 屏幕的宽度像素点
    int32 screent_height = 18;    // 屏幕的高度像素点

    // 操作系统相关配置
    Platform platform = 21;      // 平台
    string operating_system = 22; // 操作系统名
    string language = 23;        // 语言
    string country = 24;         // 国家
    string tm_zone = 25;        // 时区

    // iOS相关的信息
    bool ios_jailbreak = 51;                 // 是否越狱
    string ios_advertising_identifier = 56;  // 唯一区分设备号idfa
    string ios_identifier_for_vendor = 57;   // idfv
};


message WebsiteLog {
    int64 request_time_ms = 1;   // 请求时间，精确到毫秒
    int64 response_time_ms = 2;  // 请求的响应时间，精确到毫秒
    string action = 3;           // 事件标识
    int64 recv_time_ms = 6;      // 日志接收时间
    string remote_host = 8;      // 前端ip？
    string checksum = 9;         // 日志唯一性标识？

    // 以下为 request 的内容
    AppMeta app_meta = 101;      // app客户端的meta信息
    string api_version = 102;    // API 版本号
    UID uid = 103;               // 用户相关的ID, 唯一标识用户
    string reqid = 104;     // (来自API组的需求) request_id
    string ip = 105; //request.ip / request.clientInfo.deviceInfo.ip
    string net_type = 106;      //request.net

    // 其它常用 request 参数待补充
    map<string, string>  request_context = 199;  // 其它不常用的来自请求的输入参数

    // 以下为 response 的内容
    string status = 201;     // 请求是否成功的状态标识
    int32 code = 202;       // 具体状态code
    string reason = 203;    // 错误原因

    // 其它常用 response 参数待补充
    map<string, string>  response_context = 299;  // 其它不常用的来自响应的输入参数
};