syntax = "proto3"; package v2ray.core.app.observatory; option csharp_namespace = "V2Ray.Core.App.Observatory"; option go_package = "github.com/v2fly/v2ray-core/v4/app/observatory"; option java_package = "com.v2ray.core.app.observatory"; option java_multiple_files = true; message ObservationResult { repeated OutboundStatus status = 1; } message HealthPingMeasurementResult { int64 all = 1; int64 fail = 2; int64 deviation = 3; int64 average = 4; int64 max = 5; int64 min = 6; } message OutboundStatus{ /* @Document Whether this outbound is usable @Restriction ReadOnlyForUser */ bool alive = 1; /* @Document The time for probe request to finish. @Type time.ms @Restriction ReadOnlyForUser */ int64 delay = 2; /* @Document The last error caused this outbound failed to relay probe request @Restriction NotMachineReadable */ string last_error_reason = 3; /* @Document The outbound tag for this Server @Type id.outboundTag */ string outbound_tag = 4; /* @Document The time this outbound is known to be alive @Type id.outboundTag */ int64 last_seen_time = 5; /* @Document The time this outbound is tried @Type id.outboundTag */ int64 last_try_time = 6; HealthPingMeasurementResult health_ping = 7; } message ProbeResult{ /* @Document Whether this outbound is usable @Restriction ReadOnlyForUser */ bool alive = 1; /* @Document The time for probe request to finish. @Type time.ms @Restriction ReadOnlyForUser */ int64 delay = 2; /* @Document The error caused this outbound failed to relay probe request @Restriction NotMachineReadable */ string last_error_reason = 3; } message Intensity{ /* @Document The time interval for a probe request in ms. @Type time.ms */ uint32 probe_interval = 1; } message Config { /* @Document The selectors for outbound under observation */ repeated string subject_selector = 2; string probe_url = 3; int64 probe_interval = 4; }