Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions neteng/fboss/bgp/cpp/BgpServiceBase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include "neteng/fboss/bgp/cpp/BgpProfiler.h"
#include "neteng/fboss/bgp/cpp/BgpServiceBase.h"
#include "neteng/fboss/bgp/cpp/BgpServiceUtil.h"
#include "neteng/fboss/bgp/cpp/common/BuildInfo.h"
#include "neteng/fboss/bgp/cpp/common/EvbUtils.h"
#include "neteng/fboss/bgp/cpp/peer/PeerManagerBase.h"
#include "neteng/fboss/bgp/cpp/stats/StatsBase.h"
Expand Down Expand Up @@ -92,6 +93,11 @@ TBgpNetwork toBgpNetwork(const TIpPrefix& prefix, const TBgpPath& path) {

namespace facebook::bgp {

void BgpServiceBase::getBuildInfo(
std::map<std::string, std::string>& info) {
info = BuildInfo::toMap();
}

BgpServiceBase::BgpServiceBase(
PeerManagerBase& peerMgr,
std::shared_ptr<ConfigManager> configManager,
Expand Down
3 changes: 3 additions & 0 deletions neteng/fboss/bgp/cpp/BgpServiceBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

#pragma once

#include <map>
#include <set>
#include <string>
#include <string_view>
Expand Down Expand Up @@ -53,6 +54,8 @@ class BgpServiceBase
bool enable_thrift_protection);
~BgpServiceBase() override = default;

void getBuildInfo(std::map<std::string, std::string>& info) override;

/**
* [Logging]
*
Expand Down
21 changes: 21 additions & 0 deletions neteng/fboss/bgp/cpp/common/BuildInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,27 @@ const char* BuildInfo::getBuildMode() {
return BuildInfo_kBuildMode;
}

std::map<std::string, std::string> BuildInfo::toMap() {
const auto packageName = std::string(getBuildPackageName()).empty()
? "bgp"
: getBuildPackageName();
const auto packageVersion = std::string(getBuildPackageVersion()).empty()
? getBuildRevision()
: getBuildPackageVersion();
return {
{"build_package_name", packageName},
{"build_package_version", packageVersion},
{"build_package_info",
fmt::format("{}-{}", packageName, packageVersion)},
{"build_user", getBuildUser()},
{"build_time", getBuildTime()},
{"build_host", getBuildHost()},
{"build_path", getBuildPath()},
{"build_platform", getBuildPlatform()},
{"build_revision", getBuildRevision()},
};
}

std::string BuildInfo::toDebugString() {
return fmt::format(
"\n Built by: {}\n"
Expand Down
4 changes: 4 additions & 0 deletions neteng/fboss/bgp/cpp/common/BuildInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#pragma once

#include <inttypes.h>
#include <map>
#include <ostream>
#include <string>

Expand Down Expand Up @@ -46,6 +47,9 @@ class BuildInfo {
static const char* getBuildTool();
static const char* getBuildMode();

/** Returns build metadata using the fb303-compatible build_* keys. */
static std::map<std::string, std::string> toMap();

/**
* Returns a formatted debug string with all build information.
* Used for gflags version string (--version output).
Expand Down
11 changes: 11 additions & 0 deletions neteng/fboss/bgp/cpp/tests/BgpServiceBaseTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include <gmock/gmock.h>
#include <gtest/gtest.h>

#include <map>
#include <stdexcept>

#include <folly/ScopeGuard.h>
Expand Down Expand Up @@ -498,4 +499,14 @@ TEST_F(BgpServiceBaseTestFixture, GetProcessUptimeSecondsTest) {
EXPECT_GE(uptime2, uptime1);
}

TEST_F(BgpServiceBaseTestFixture, GetBuildInfoReturnsRunningBinaryMetadata) {
std::map<std::string, std::string> info;

service_->getBuildInfo(info);

EXPECT_EQ(info.at("build_package_name"), "bgp");
EXPECT_FALSE(info.at("build_package_version").empty());
EXPECT_EQ(info.at("build_package_version"), info.at("build_revision"));
}

} // namespace facebook::bgp
11 changes: 11 additions & 0 deletions neteng/fboss/bgp/cpp/tests/BuildInfoTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,14 @@ TEST(BuildInfoTest, LogWritesFieldLabelsToStream) {
EXPECT_NE(std::string::npos, output.find("Built by"));
EXPECT_NE(std::string::npos, output.find("Build Revision"));
}

TEST(BuildInfoTest, ToMapContainsCliVersionFields) {
const auto info = BuildInfo::toMap();

EXPECT_EQ(info.at("build_package_name"), "bgp");
EXPECT_EQ(
info.at("build_package_version"), BuildInfo::getBuildRevision());
EXPECT_EQ(info.at("build_revision"), BuildInfo::getBuildRevision());
EXPECT_EQ(info.at("build_user"), BuildInfo::getBuildUser());
EXPECT_EQ(info.at("build_platform"), BuildInfo::getBuildPlatform());
}
5 changes: 5 additions & 0 deletions neteng/fboss/bgp/if/bgp_thrift.thrift
Original file line number Diff line number Diff line change
Expand Up @@ -1422,6 +1422,11 @@ enum ClearBgpNeighborDirection {

// @lint-ignore THRIFTCHECKS facebook-service-deprecated existing service inheritance is out of scope for this API addition
service TBgpService extends fb303.FacebookService {
/**
* Return build metadata for the running BGP process.
*/
map<string, string> getBuildInfo();

/**
* [Logging]
*
Expand Down