aboutsummaryrefslogtreecommitdiffstats
path: root/logd/src/logd/proto_converter.cpp
blob: 0911a844eb7e25bd6dc037bbc05f81c93185e8f1 (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
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

#include "proto_converter.h"
#include <vespa/vespalib/text/utf8.h>

using ns_log::LogMessage;
using ns_log::Logger;

namespace logdemon {

void
ProtoConverter::log_messages_to_proto(const std::vector<LogMessage>& messages, ProtoLogRequest& proto)
{
    for (const auto& message : messages) {
        auto* proto_message = proto.add_log_messages();
        log_message_to_proto(message, *proto_message);
    }
}

namespace {

using ProtoLogLevel = ::logserver::protocol::protobuf::LogMessage_Level;

ProtoLogLevel
convert_level(const Logger::LogLevel& level)
{
    switch (level) {
        case Logger::fatal:
            return ProtoLogLevel::LogMessage_Level_FATAL;
        case Logger::error:
            return ProtoLogLevel::LogMessage_Level_ERROR;
        case Logger::warning:
            return ProtoLogLevel::LogMessage_Level_WARNING;
        case Logger::config:
            return ProtoLogLevel::LogMessage_Level_CONFIG;
        case Logger::info:
            return ProtoLogLevel::LogMessage_Level_INFO;
        case Logger::event:
            return ProtoLogLevel::LogMessage_Level_EVENT;
        case Logger::debug:
            return ProtoLogLevel::LogMessage_Level_DEBUG;
        case Logger::spam:
            return ProtoLogLevel::LogMessage_Level_SPAM;
        case Logger::NUM_LOGLEVELS:
            return ProtoLogLevel::LogMessage_Level_UNKNOWN;
        default:
            return ProtoLogLevel::LogMessage_Level_UNKNOWN;
    }
}

}

void
ProtoConverter::log_message_to_proto(const LogMessage& message, ProtoLogMessage& proto)
{
    proto.set_time_nanos(message.time_nanos());
    proto.set_hostname(message.hostname());
    proto.set_process_id(message.process_id());
    proto.set_thread_id(message.thread_id());
    proto.set_service(message.service());
    proto.set_component(message.component());
    proto.set_level(convert_level(message.level()));
    proto.set_payload(vespalib::Utf8::filter_invalid_sequences(message.payload()));
}

}