blob: eb00fecfab69b4b41d16618fce1999c8f005a0da (
plain) (
blame)
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
|
#pragma once
#include <util/stream/output.h>
#include <util/generic/maybe.h>
#include <util/generic/utility.h>
#include <util/generic/yexception.h>
#include <util/ysaveload.h>
using TEventClass = ui32;
using TEventLogFormat = ui32;
using TEventTimestamp = ui64;
constexpr TStringBuf COMPRESSED_LOG_FRAME_SYNC_DATA =
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\xfe\x00\x00\xff\xff\x00\x00\xff\xff\x00"
"\x00\xff\xff\x00\x00\xff\xff\x00\x00\xff\xff\x00\x00\xff"
"\xff\x00\x00\xff\xff\x00\x00\xff"sv;
static_assert(COMPRESSED_LOG_FRAME_SYNC_DATA.size() == 64);
/*
* Коды форматов логов. Форматом лога считается формат служебных
* структур лога. К примеру формат заголовка, наличие компрессии, и т.д.
* Имеет значение только 1 младший байт.
*/
enum EEventLogFormat : TEventLogFormat {
// Формат версии 1. Используется компрессор LZQ.
COMPRESSED_LOG_FORMAT_V1 = 1,
// Формат версии 2. Используется компрессор ZLIB. Добавлены CRC заголовка и данных,
// поле типа компрессора.
COMPRESSED_LOG_FORMAT_V2 = 2,
// Формат версии 3. Используется компрессор ZLIB. В начинке фреймов перед каждым событием добавлен его размер.
COMPRESSED_LOG_FORMAT_V3 = 3,
// Lz4hc codec + zlib
COMPRESSED_LOG_FORMAT_V4 = 4 /* "zlib_lz4" */,
// zstd
COMPRESSED_LOG_FORMAT_V5 = 5 /* "zstd" */,
};
TMaybe<TEventLogFormat> ParseEventLogFormat(TStringBuf str);
#pragma pack(push, 1)
struct TCompressedFrameBaseHeader {
TEventLogFormat Format;
ui32 Length; // Длина остатка фрейма в байтах, после этого заголовка
ui32 FrameId;
};
struct TCompressedFrameHeader {
TEventTimestamp StartTimestamp;
TEventTimestamp EndTimestamp;
ui32 UncompressedDatalen; // Длина данных, которые были закомпрессированы
ui32 PayloadChecksum; // В логе версии 1 поле не используется
};
struct TCompressedFrameHeader2: public TCompressedFrameHeader {
ui8 CompressorVersion; // Сейчас не используется
ui32 HeaderChecksum;
};
#pragma pack(pop)
Y_DECLARE_PODTYPE(TCompressedFrameBaseHeader);
Y_DECLARE_PODTYPE(TCompressedFrameHeader);
Y_DECLARE_PODTYPE(TCompressedFrameHeader2);
|