1
0
mirror of https://github.com/danog/MadelineProto.git synced 2024-11-30 04:08:59 +01:00

Add inflight request gauge

This commit is contained in:
Daniil Gentili 2024-05-16 20:00:42 +02:00
parent f04d072af0
commit 6421d7f231
6 changed files with 52 additions and 7 deletions

2
docs

@ -1 +1 @@
Subproject commit f37b981f1b0dfb1ea4020e509180840a15a7289a
Subproject commit 7fc41dd5738ab4c9dbc2e756e8140719ce2c2d1c

View File

@ -3643,6 +3643,12 @@
<code><![CDATA[$request->getSent()]]></code>
<code><![CDATA[$request->getSent()]]></code>
</PossiblyNullOperand>
<PossiblyNullReference>
<code><![CDATA[dec]]></code>
<code><![CDATA[dec]]></code>
<code><![CDATA[observe]]></code>
<code><![CDATA[observe]]></code>
</PossiblyNullReference>
<RedundantConditionGivenDocblockType>
<code><![CDATA[$this->API->authorized_dc == $this->datacenter && $this->API->authorized === \danog\MadelineProto\API::LOGGED_IN]]></code>
</RedundantConditionGivenDocblockType>

@ -1 +1 @@
Subproject commit 6fc533efe6e1ce440f6da4b0d7037460f73ce96b
Subproject commit da7d066eee5fa53e5ef43a964032d56197810de9

View File

@ -125,6 +125,11 @@ final class WriteLoop extends Loop
$this->connection->outgoing_messages[$message_id] = $message;
$this->connection->new_outgoing[$message_id] = $message;
if ($message->getSent() === null) {
$this->connection->inFlightGauge?->inc([
'method' => $message->constructor,
]);
}
$message->sent();
}
if ($skipped_all) {
@ -371,6 +376,11 @@ final class WriteLoop extends Loop
if ($message->hasPromise()) {
$this->connection->new_outgoing[$message_id] = $message;
}
if ($message->getSent() === null) {
$this->connection->inFlightGauge?->inc([
'method' => $message->constructor,
]);
}
$message->sent();
$message->cancellation?->subscribe(function () use ($message): void {
if ($message->hasMsgId()) {

View File

@ -281,8 +281,11 @@ trait ResponseHandler
'error_message' => 'OK',
'error_code' => '200',
]);
$this->requestLatencies?->observe(
(hrtime(true) - $request->getSent()) / 1_000_000_000.0,
$this->inFlightGauge->dec([
'method' => $request->constructor,
]);
$this->requestLatencies->observe(
hrtime(true) - $request->getSent(),
['method' => $request->constructor]
);
}
@ -301,8 +304,11 @@ trait ResponseHandler
'error_message' => preg_replace('/\d+/', 'X', $response['error_message']),
'error_code' => (string) $response['error_code'],
]);
$this->requestLatencies?->observe(
(hrtime(true) - $request->getSent()) / 1_000_000_000.0,
$this->inFlightGauge->dec([
'method' => $request->constructor,
]);
$this->requestLatencies->observe(
hrtime(true) - $request->getSent(),
['method' => $request->constructor]
);
}

View File

@ -44,6 +44,7 @@ trait Session
use CallHandler;
use Reliable;
public ?BetterGauge $pendingOutgoingGauge = null;
public ?BetterGauge $inFlightGauge = null;
public ?BetterCounter $incomingCtr = null;
public ?BetterCounter $outgoingCtr = null;
public ?BetterCounter $incomingBytesCtr = null;
@ -185,12 +186,34 @@ trait Session
{
$labels = ['datacenter' => (string) $this->datacenter, 'connection' => (string) $this->id];
$this->pendingOutgoingGauge = $this->API->getPromGauge("MadelineProto", "pending_outgoing_mtproto_messages", "Number of not-yet sent outgoing MTProto messages", $labels);
$this->inFlightGauge = $this->API->getPromGauge("MadelineProto", "inflight_requests", "Number of in-flight requests", $labels);
$this->incomingCtr = $this->API->getPromCounter("MadelineProto", "incoming_mtproto_messages", "Number of received MTProto messages", $labels);
$this->outgoingCtr = $this->API->getPromCounter("MadelineProto", "outgoing_mtproto_messages", "Number of sent MTProto messages", $labels);
$this->incomingBytesCtr = $this->API->getPromCounter("MadelineProto", "incoming_bytes", "Number of received bytes", $labels);
$this->outgoingBytesCtr = $this->API->getPromCounter("MadelineProto", "outgoing_bytes", "Number of sent bytes", $labels);
$this->requestResponse = $this->API->getPromCounter("MadelineProto", "request_responses", "Received RPC error or success status of requests by method.", $labels);
$this->requestLatencies = $this->API->getPromHistogram("MadelineProto", "request_latencies", "Request latency by method", $labels);
$this->requestLatencies = $this->API->getPromHistogram(
"MadelineProto",
"request_latencies",
"Request latency in nanoseconds by method",
$labels,
[
5_000_000,
10_000_000,
25_000_000,
50_000_000,
75_000_000,
100_000_000,
250_000_000,
500_000_000,
750_000_000,
1000_000_000,
2500_000_000,
5000_000_000,
7500_000_000,
10000_000_000,
]
);
if ($this->session_id === null) {
$this->resetSession("creating initial session");
}