This repository has been archived by the owner on Apr 19, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 99
/
peers.proto
73 lines (59 loc) · 2.65 KB
/
peers.proto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
Copyright 2018-2022 Mailgun Technologies Inc
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
syntax = "proto3";
option go_package = "github.com/mailgun/gubernator";
option cc_generic_services = true;
package pb.gubernator;
import "gubernator.proto";
// NOTE: For use by gubernator peers only
service PeersV1 {
// Used by peers to relay batches of requests to an owner peer
rpc GetPeerRateLimits (GetPeerRateLimitsReq) returns (GetPeerRateLimitsResp) {}
// Used by owner peers to send global rate limit updates to non-owner peers
rpc UpdatePeerGlobals (UpdatePeerGlobalsReq) returns (UpdatePeerGlobalsResp) {}
}
message GetPeerRateLimitsReq {
// Must specify at least one RateLimit. The peer that recives this request MUST be authoritative for
// each rate_limit[x].unique_key provided, as the peer will not forward the request to any other peers
repeated RateLimitReq requests = 1;
}
message GetPeerRateLimitsResp {
// Responses are in the same order as they appeared in the PeerRateLimitRequests
repeated RateLimitResp rate_limits = 1;
}
message UpdatePeerGlobalsReq {
// Must specify at least one RateLimit
repeated UpdatePeerGlobal globals = 1;
}
message UpdatePeerGlobal {
// Uniquely identifies this rate limit IE: 'ip:10.2.10.7' or 'account:123445'
string key = 1;
RateLimitResp status = 2;
// The algorithm used to calculate the rate limit. The algorithm may change on
// subsequent requests, when this occurs any previous rate limit hit counts are reset.
Algorithm algorithm = 3;
// The duration of the rate limit in milliseconds
int64 duration = 4;
// The exact time the original request was created in Epoch milliseconds.
// Due to time drift between systems, it may be advantageous for a client to
// set the exact time the request was created. It possible the system clock
// for the client has drifted from the system clock where gubernator daemon
// is running.
//
// The created time is used by gubernator to calculate the reset time for
// both token and leaky algorithms. If it is not set by the client,
// gubernator will set the created time when it receives the rate limit
// request.
int64 created_at = 5;
}
message UpdatePeerGlobalsResp {}