1
0
mirror of https://github.com/danog/MadelineProto.git synced 2024-11-26 19:24:42 +01:00

Improve counters

This commit is contained in:
Daniil Gentili 2024-05-09 20:40:01 +02:00
parent 75bc23ccc0
commit be472eaadd
5 changed files with 25 additions and 10 deletions

View File

@ -60,7 +60,7 @@ final class CheckLoop extends Loop
}
if ($this->shared->hasTempAuthKey()) {
$full_message_ids = $this->connection->getPendingCalls();
foreach (array_chunk($full_message_ids, 8192) as $message_ids) {
foreach (array_chunk($full_message_ids, WriteLoop::MAX_IDS) as $message_ids) {
$deferred = new DeferredFuture();
$list = '';
// Don't edit this here pls

View File

@ -40,7 +40,7 @@ use function strlen;
*/
final class WriteLoop extends Loop
{
public const MAX_COUNT = 1020;
private const MAX_COUNT = 1020;
private const MAX_SIZE = 1 << 15;
public const MAX_IDS = 8192;
@ -197,7 +197,7 @@ final class WriteLoop extends Loop
$body_length = \strlen($message->getSerializedBody());
$actual_length = $body_length + 32;
if ($total_length && $total_length + $actual_length > 32760 || $count >= 1020) {
if ($total_length && $total_length + $actual_length > 32760 || $count >= self::MAX_COUNT) {
$this->API->logger('Length overflow, postponing part of payload', Logger::ULTRA_VERBOSE);
break;
}

View File

@ -923,7 +923,7 @@ final class MTProto implements TLCallback, LoggerGetter, SettingsGetter
*/
private function cleanupProperties(): void
{
$this->updateCtr = $this->getPromCounter("", "update_count", "Number of received updates since the session was created");
$this->updateCtr = $this->getPromCounter("MadelineProto", "update_count", "Number of received updates since the session was created");
// Start IPC server
if (!$this->ipcServer) {
$this->ipcServer = new Server($this);

View File

@ -273,6 +273,14 @@ trait ResponseHandler
}
$this->gotResponseForOutgoingMessage($request);
if ($this->requestResponse !== null) {
$this->requestResponse->inc([
'method' => $request->constructor,
'error_message' => 'OK',
'error_code' => '200'
]);
}
EventLoop::queue($request->reply(...), $response);
}
/**
@ -281,10 +289,12 @@ trait ResponseHandler
*/
private function handleRpcError(MTProtoOutgoingMessage $request, array $response): ?callable
{
if ($response['error_code'] === 420) {
$this->rpcErrors?->inc(['message' => preg_replace('/\d+/', '', $response['error_message']), 'code' => (string) $response['error_code']]);
} else {
$this->rpcErrors?->inc(['message' => $response['error_message'], 'code' => (string) $response['error_code']]);
if ($this->requestResponse !== null) {
$this->requestResponse->inc([
'method' => $request->constructor,
'error_message' => preg_replace('/\d+/', 'X', $response['error_message']),
'error_code' => (string) $response['error_code']
]);
}
if ($request->isMethod
&& $request->constructor !== 'auth.bindTempAuthKey'

View File

@ -23,6 +23,7 @@ namespace danog\MadelineProto\MTProtoSession;
use Amp\Sync\LocalKeyedMutex;
use danog\BetterPrometheus\BetterCounter;
use danog\BetterPrometheus\BetterGauge;
use danog\BetterPrometheus\BetterHistogram;
use danog\MadelineProto\Logger;
use danog\MadelineProto\MTProto\MTProtoIncomingMessage;
use danog\MadelineProto\MTProto\MTProtoOutgoingMessage;
@ -47,7 +48,10 @@ trait Session
public ?BetterCounter $outgoingCtr = null;
public ?BetterCounter $incomingBytesCtr = null;
public ?BetterCounter $outgoingBytesCtr = null;
public ?BetterCounter $rpcErrors = null;
public ?BetterHistogram $requestLatencies = null;
public ?BetterCounter $requestResponse = null;
/**
* Incoming message array.
*
@ -185,7 +189,8 @@ trait Session
$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->rpcErrors = $this->API->getPromCounter("MadelineProto", "rpc_errors", "Number of received RPC errors by type", $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);
if ($this->session_id === null) {
$this->resetSession("creating initial session");
}