message Interaction {
  enum Type {
    request = 0;
    channel_receive = 1;
    channel_join = 2;
  }

  message EctoQuery {
    optional string query = 1;
    optional uint64 query_time = 2;
    optional uint64 decode_time = 3;
    optional uint64 queue_time = 4;
    optional string source = 5;
    optional uint64 duration = 6;
    optional uint64 offset = 7;
  }

  message ViewRendering {
    optional string format = 1;
    optional string template = 2;
    optional uint64 offset = 3;
    optional uint64 duration = 4;
  }

  message CustomMetric {
    optional string key = 1;
    optional uint64 offset = 2;
    optional string file = 3;
    optional string module = 4;
    optional string function = 5;
    optional uint32 line = 6;
    optional uint64 duration = 7;
  }


  required Type type = 1;
  required string interaction_id =2;
  required uint64 start_time = 6;
  optional uint64 duration = 3;
  optional string action = 4;
  optional string controller = 5;
  repeated EctoQuery ecto_queries = 7;
  repeated ViewRendering view_renderings = 8;
  repeated CustomMetric custom_metrics = 9;
  optional string channel = 10;
  optional string topic = 11;
  optional string event = 12;
}