syntax = "proto3";

package easyfl.pb;

enum StatusCode {
    SC_OK = 0;
    SC_UNKNOWN = 1;
    SC_INVALID_REQUEST = 2;
    SC_DEADLINE_EXCEEDED = 3;
    SC_NOT_FOUND = 4;
    SC_ALREADY_EXISTS = 5;
}

message Status {
    StatusCode code = 1;
    string message = 2;
}

enum DataType {
    // Model parameters or gradients
    DATA_TYPE_PARAMS = 0;
    // Performance
    DATA_TYPE_PERFORMANCE = 1;
}

message TaskMetric {
    string task_id = 1;
    string configuration = 2;
}

message RoundMetric {
    string task_id = 1;
    int32 round_id = 2;
    float test_accuracy = 3;
    float test_loss = 4;
    float round_time = 5;
    float train_time = 6;
    float test_time = 7;
    float train_distribute_time = 8;
    float test_distribute_time = 9;
    float train_upload_size = 10;
    float train_download_size = 11;
    float test_upload_size = 12;
    float test_download_size = 13;
    string extra = 14;
}

message ClientMetric {
    string task_id = 1;
    int32 round_id = 2;
    string client_id = 3;
    repeated float train_accuracy = 4;
    repeated float train_loss = 5;
    float test_accuracy = 6;
    float test_loss = 7;
    float train_time = 8;
    float test_time = 9;
    float train_upload_time = 10;
    float test_upload_time = 11;
    float train_upload_size = 12;
    float train_download_size = 13;
    float test_upload_size = 14;
    float test_download_size = 15;
    string extra = 16;
}