main.cpp 3.2 KB
Newer Older
Q
qinzuoyan 已提交
1 2 3 4 5 6 7
// Copyright (c) 2017, Xiaomi, Inc.  All rights reserved.
// This source code is licensed under the Apache License Version 2.0, which
// can be found in the LICENSE file in the root directory of this source tree.

#include "pegasus_server_impl.h"
#include "pegasus_service_app.h"
#include "info_collector_app.h"
8
#include "brief_stat.h"
Q
qinzuoyan 已提交
9

10
#include <dsn/git_commit.h>
Q
qinzuoyan 已提交
11 12
#include <pegasus/version.h>
#include <pegasus/git_commit.h>
13

Q
qinzuoyan 已提交
14
#include <dsn/tool_api.h>
15
#include <dsn/tool-api/command_manager.h>
Q
qinzuoyan 已提交
16

17 18 19
#include <dsn/dist/replication/replication_service_app.h>
#include <dsn/dist/replication/meta_service_app.h>

Q
qinzuoyan 已提交
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
#include <cstdio>
#include <cstring>
#include <chrono>

#include <sys/types.h>
#include <unistd.h>

#define STR_I(var) #var
#define STR(var) STR_I(var)
#ifndef DSN_BUILD_TYPE
#define PEGASUS_BUILD_TYPE ""
#else
#define PEGASUS_BUILD_TYPE STR(DSN_BUILD_TYPE)
#endif

35 36 37 38 39
static char const rcsid[] =
    "$Version: Pegasus Server " PEGASUS_VERSION " (" PEGASUS_GIT_COMMIT ")"
#if defined(DSN_BUILD_TYPE)
    " " STR(DSN_BUILD_TYPE)
#endif
40
        ", built with rDSN (" DSN_GIT_COMMIT ")"
41 42 43 44 45 46 47 48
        ", built by gcc " STR(__GNUC__) "." STR(__GNUC_MINOR__) "." STR(__GNUC_PATCHLEVEL__)
#if defined(DSN_BUILD_HOSTNAME)
            ", built on " STR(DSN_BUILD_HOSTNAME)
#endif
                ", built at " __DATE__ " " __TIME__ " $";

const char *pegasus_server_rcsid() { return rcsid; }

49 50 51
using namespace dsn;
using namespace dsn::replication;

Q
qinzuoyan 已提交
52 53
void dsn_app_registration_pegasus()
{
54
    dsn::service::meta_service_app::register_components();
55 56 57
    service_app::register_factory<pegasus::server::pegasus_meta_service_app>("meta");
    service_app::register_factory<pegasus::server::pegasus_replication_service_app>("replica");
    service_app::register_factory<pegasus::server::info_collector_app>("collector");
58
    pegasus::server::pegasus_server_impl::register_service();
Q
qinzuoyan 已提交
59

60
    dsn::command_manager::instance().register_command(
61
        {"server-info"},
Q
qinzuoyan 已提交
62 63 64 65
        "server-info - query server information",
        "server-info",
        [](const std::vector<std::string> &args) {
            char str[100];
66
            ::dsn::utils::time_ms_to_date_time(dsn::utils::process_start_millis(), str, 100);
Q
qinzuoyan 已提交
67 68 69 70 71
            std::ostringstream oss;
            oss << "Pegasus Server " << PEGASUS_VERSION << " (" << PEGASUS_GIT_COMMIT << ") "
                << PEGASUS_BUILD_TYPE << ", Started at " << str;
            return oss.str();
        });
72 73 74 75 76
    dsn::command_manager::instance().register_command(
        {"server-stat"},
        "server-stat - query selected perf counters",
        "server-stat",
        [](const std::vector<std::string> &args) { return pegasus::get_brief_stat(); });
Q
qinzuoyan 已提交
77 78 79 80 81 82 83 84 85 86 87
}

int main(int argc, char **argv)
{
    for (int i = 1; i < argc; ++i) {
        if (strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "-version") == 0 ||
            strcmp(argv[i], "--version") == 0) {
            printf("Pegasus Server %s (%s) %s\n",
                   PEGASUS_VERSION,
                   PEGASUS_GIT_COMMIT,
                   PEGASUS_BUILD_TYPE);
C
cailiuyang 已提交
88
            dsn_exit(0);
Q
qinzuoyan 已提交
89 90 91 92 93
        }
    }
    ddebug("pegasus server starting, pid(%d), version(%s)", (int)getpid(), pegasus_server_rcsid());
    dsn_app_registration_pegasus();
    dsn_run(argc, argv, true);
94

Q
qinzuoyan 已提交
95 96
    return 0;
}