|
| 1 | +syntax = "proto3"; |
| 2 | + |
| 3 | +package charithe.telemetry.v1; |
| 4 | + |
| 5 | +option go_package = "v1pb"; |
| 6 | +option java_multiple_files = true; |
| 7 | +option java_outer_classname = "TelemetryProto"; |
| 8 | +option java_package = "io.github.charithe.telemetry.v1"; |
| 9 | + |
| 10 | +import "google/protobuf/timestamp.proto"; |
| 11 | +import "validate/validate.proto"; |
| 12 | + |
| 13 | +service Telemetry { |
| 14 | + // Record receives and persists telemetry data from remote devices |
| 15 | + rpc Record(RecordRequest) returns (RecordResponse); |
| 16 | +} |
| 17 | + |
| 18 | +message RecordRequest { |
| 19 | + TelemetryData data = 1; |
| 20 | +} |
| 21 | + |
| 22 | +message RecordResponse {} |
| 23 | + |
| 24 | +message TelemetryData { |
| 25 | + // device_id must start with 'device' and be between 12 and 24 characters in length |
| 26 | + string device_id = 1 [ |
| 27 | + (validate.rules).string = { |
| 28 | + prefix: "device-" |
| 29 | + min_len: 12 |
| 30 | + max_len: 24 |
| 31 | + } |
| 32 | + ]; |
| 33 | + // ip_address must be a valida IP adddress |
| 34 | + string ip_address = 2 [(validate.rules).string.ip = true]; |
| 35 | + // software_version must be between 100 and 200 |
| 36 | + uint32 software_version = 3 [ |
| 37 | + (validate.rules).uint32 = { |
| 38 | + gte: 100 |
| 39 | + lt: 200 |
| 40 | + } |
| 41 | + ]; |
| 42 | + // temperature must be between -60 and 190.5 |
| 43 | + float temperature = 4 [ |
| 44 | + (validate.rules).float = { |
| 45 | + gte: -60.0 |
| 46 | + lte: 190.5 |
| 47 | + } |
| 48 | + ]; |
| 49 | + // log_entries must contain at least one entry |
| 50 | + repeated LogEntry log_entries = 5 [(validate.rules).repeated.min_items = 1]; |
| 51 | +} |
| 52 | + |
| 53 | +message LogEntry { |
| 54 | + // timestamp must be after 2018-01-01 |
| 55 | + google.protobuf.Timestamp timestamp = 1 [(validate.rules).timestamp.gte.seconds = 1514764800]; |
| 56 | + // component must be at least 5 characters long |
| 57 | + string component = 2 [(validate.rules).string.min_len = 5]; |
| 58 | + // state must be at least 10 bytes long |
| 59 | + bytes state = 3 [(validate.rules).bytes.min_len = 10]; |
| 60 | +} |
0 commit comments