Skip to content

Commit a81237c

Browse files
committed
Added function to get the hostname on linux + unit test
Hostname is now included in anomaly provenance data Unit test main programs now store argc and argv ptrs for use in tests
1 parent c4b79a7 commit a81237c

13 files changed

Lines changed: 124 additions & 7 deletions

File tree

benchmark_suite/benchmark_provdb/benchmark_client.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,8 @@ int main(int argc, char **argv){
153153
{"io_step", 199},
154154
{"io_step_tstart", 0},
155155
{"io_step_tend", 5000},
156-
{"outlier_score",0.1}
156+
{"outlier_score",0.1},
157+
{"hostname","myhost"}
157158
};
158159

159160
std::vector<nlohmann::json> anomaly_prov(args.anomalies_per_cycle, provenance_entry);

include/Makefile.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
nobase_include_HEADERS = chimbuko/chimbuko.hpp chimbuko/ad/ADOutlier.hpp chimbuko/ad/ADNetClient.hpp chimbuko/ad/ADAnomalyProvenance.hpp chimbuko/ad/ADParser.hpp chimbuko/ad/ADProvenanceDBengine.hpp chimbuko/ad/ADNormalEventProvenance.hpp chimbuko/ad/ADLocalFuncStatistics.hpp chimbuko/ad/ADMetadataParser.hpp chimbuko/ad/AnomalyData.hpp chimbuko/ad/ADDefine.hpp chimbuko/ad/ADglobalFunctionIndexMap.hpp chimbuko/ad/ADProvenanceDBclient.hpp chimbuko/ad/ADEvent.hpp chimbuko/ad/ADCounter.hpp chimbuko/ad/ADLocalCounterStatistics.hpp chimbuko/ad/ExecData.hpp chimbuko/ad/utils.hpp chimbuko/ad/ADio.hpp chimbuko/verbose.hpp chimbuko/pserver/PSProvenanceDBclient.hpp chimbuko/pserver/global_anomaly_stats.hpp chimbuko/pserver/PSglobalFunctionIndexMap.hpp chimbuko/pserver/PSstatSender.hpp chimbuko/pserver/AnomalyStat.hpp chimbuko/pserver/global_counter_stats.hpp chimbuko/param/sstd_param.hpp chimbuko/param/hbos_param.hpp chimbuko/AD.hpp chimbuko/message.hpp chimbuko/net.hpp chimbuko/pserver.hpp chimbuko/param.hpp chimbuko/net/zmqme_net.hpp chimbuko/net/mpi_net.hpp chimbuko/net/zmq_net.hpp chimbuko/net/local_net.hpp chimbuko/util/RunStats.hpp chimbuko/util/ADIOS2parseUtils.hpp chimbuko/util/time.hpp chimbuko/util/map.hpp chimbuko/util/error.hpp chimbuko/util/string.hpp chimbuko/util/DispatchQueue.hpp chimbuko/util/PerfStats.hpp chimbuko/util/RunMetric.hpp chimbuko/util/memutils.hpp chimbuko/util/Anomalies.hpp chimbuko/util/barrier.hpp chimbuko/util/threadPool.hpp chimbuko/util/hash.hpp chimbuko/util/mtQueue.hpp chimbuko/util/serialize.hpp chimbuko/util/commandLineParser.hpp
1+
nobase_include_HEADERS = chimbuko/chimbuko.hpp chimbuko/ad/ADOutlier.hpp chimbuko/ad/ADNetClient.hpp chimbuko/ad/ADAnomalyProvenance.hpp chimbuko/ad/ADParser.hpp chimbuko/ad/ADProvenanceDBengine.hpp chimbuko/ad/ADNormalEventProvenance.hpp chimbuko/ad/ADLocalFuncStatistics.hpp chimbuko/ad/ADMetadataParser.hpp chimbuko/ad/AnomalyData.hpp chimbuko/ad/ADDefine.hpp chimbuko/ad/ADglobalFunctionIndexMap.hpp chimbuko/ad/ADProvenanceDBclient.hpp chimbuko/ad/ADEvent.hpp chimbuko/ad/ADCounter.hpp chimbuko/ad/ADLocalCounterStatistics.hpp chimbuko/ad/ExecData.hpp chimbuko/ad/utils.hpp chimbuko/ad/ADio.hpp chimbuko/verbose.hpp chimbuko/pserver/PSProvenanceDBclient.hpp chimbuko/pserver/global_anomaly_stats.hpp chimbuko/pserver/PSglobalFunctionIndexMap.hpp chimbuko/pserver/PSstatSender.hpp chimbuko/pserver/AnomalyStat.hpp chimbuko/pserver/global_counter_stats.hpp chimbuko/param/sstd_param.hpp chimbuko/param/hbos_param.hpp chimbuko/AD.hpp chimbuko/message.hpp chimbuko/net.hpp chimbuko/pserver.hpp chimbuko/param.hpp chimbuko/net/zmqme_net.hpp chimbuko/net/mpi_net.hpp chimbuko/net/zmq_net.hpp chimbuko/net/local_net.hpp chimbuko/util/RunStats.hpp chimbuko/util/ADIOS2parseUtils.hpp chimbuko/util/time.hpp chimbuko/util/map.hpp chimbuko/util/error.hpp chimbuko/util/string.hpp chimbuko/util/DispatchQueue.hpp chimbuko/util/PerfStats.hpp chimbuko/util/RunMetric.hpp chimbuko/util/memutils.hpp chimbuko/util/Anomalies.hpp chimbuko/util/barrier.hpp chimbuko/util/threadPool.hpp chimbuko/util/hash.hpp chimbuko/util/mtQueue.hpp chimbuko/util/serialize.hpp chimbuko/util/commandLineParser.hpp chimbuko/util/environment.hpp
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#pragma once
2+
#include<chimbuko_config.h>
3+
#include<string>
4+
5+
namespace chimbuko{
6+
7+
/**
8+
* @brief Get the hostname of the syste,
9+
*
10+
* Hostname is determined the first time the function is called and is maintained as a static string
11+
*/
12+
const std::string &getHostname();
13+
14+
};

sphinx/source/io_schema/provdb_schema.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ Function execution "events" in Chimbuko are labeled by a unique (for each proces
5454
| **"pid"**: *process index*,
5555
| **"rid"**: *process rank*,
5656
| **"tid"**: *thread index*
57+
| **"hostname"**: *The hostname of the node on which the application was executing*
5758
| **"runtime_exclusive"**: *Function execution time exclusive of children*,
5859
| **"runtime_total"**: *Function total execution time*,
5960
| **"io_step"**: *IO step index*,

src/Makefile.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/3rdparty @PS_FLAGS@
22

33
lib_LTLIBRARIES = libchimbuko.la
4-
libchimbuko_la_SOURCES = chimbuko.cpp param.cpp pserver/global_anomaly_stats.cpp pserver/global_counter_stats.cpp util/ADIOS2parseUtils.cpp util/RunStats.cpp util/DispatchQueue.cpp util/Anomalies.cpp util/map.cpp util/string.cpp util/error.cpp util/memutils.cpp util/time.cpp util/PerfStats.cpp ad/ADOutlier.cpp ad/ADParser.cpp ad/ADio.cpp ad/utils.cpp ad/ADEvent.cpp ad/AnomalyData.cpp ad/ExecData.cpp ad/ADCounter.cpp ad/ADAnomalyProvenance.cpp ad/ADNetClient.cpp ad/ADLocalFuncStatistics.cpp ad/ADLocalCounterStatistics.cpp ad/ADProvenanceDBengine.cpp ad/ADProvenanceDBclient.cpp ad/ADMetadataParser.cpp ad/ADglobalFunctionIndexMap.cpp ad/ADNormalEventProvenance.cpp pserver/PSstatSender.cpp pserver/PSglobalFunctionIndexMap.cpp pserver/PSProvenanceDBclient.cpp pserver/AnomalyStat.cpp message.cpp net/zmq_net.cpp net/mpi_net.cpp net/zmqme_net.cpp net/local_net.cpp net.cpp param/hbos_param.cpp param/sstd_param.cpp
4+
libchimbuko_la_SOURCES = chimbuko.cpp param.cpp pserver/global_anomaly_stats.cpp pserver/global_counter_stats.cpp util/ADIOS2parseUtils.cpp util/RunStats.cpp util/DispatchQueue.cpp util/Anomalies.cpp util/map.cpp util/string.cpp util/error.cpp util/memutils.cpp util/time.cpp util/PerfStats.cpp util/environment.cpp ad/ADOutlier.cpp ad/ADParser.cpp ad/ADio.cpp ad/utils.cpp ad/ADEvent.cpp ad/AnomalyData.cpp ad/ExecData.cpp ad/ADCounter.cpp ad/ADAnomalyProvenance.cpp ad/ADNetClient.cpp ad/ADLocalFuncStatistics.cpp ad/ADLocalCounterStatistics.cpp ad/ADProvenanceDBengine.cpp ad/ADProvenanceDBclient.cpp ad/ADMetadataParser.cpp ad/ADglobalFunctionIndexMap.cpp ad/ADNormalEventProvenance.cpp pserver/PSstatSender.cpp pserver/PSglobalFunctionIndexMap.cpp pserver/PSProvenanceDBclient.cpp pserver/AnomalyStat.cpp message.cpp net/zmq_net.cpp net/mpi_net.cpp net/zmqme_net.cpp net/local_net.cpp net.cpp param/hbos_param.cpp param/sstd_param.cpp
55
libchimbuko_la_LDFLAGS = -version-info 3:0:0

src/ad/ADAnomalyProvenance.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include <chimbuko/ad/ADAnomalyProvenance.hpp>
22
#include <chimbuko/verbose.hpp>
33
#include <chimbuko/util/error.hpp>
4+
#include <chimbuko/util/environment.hpp>
45

56
using namespace chimbuko;
67

@@ -177,9 +178,8 @@ nlohmann::json ADAnomalyProvenance::get_json() const{
177178
{"io_step", m_io_step},
178179
{"io_step_tstart", m_io_step_tstart},
179180
{"io_step_tend", m_io_step_tend},
180-
{"outlier_score", m_call.get_outlier_score() }
181-
182-
181+
{"outlier_score", m_call.get_outlier_score() },
182+
{"hostname", getHostname() }
183183
};
184184
}
185185

src/util/environment.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#include<chimbuko/util/environment.hpp>
2+
#include<chimbuko/util/error.hpp>
3+
#include <unistd.h>
4+
#include <cstring>
5+
#include <cstdlib>
6+
7+
namespace chimbuko{
8+
9+
const std::string &getHostname(){
10+
static std::string h;
11+
if(h.size() == 0){
12+
//Implementation thanks to http://www.microhowto.info/howto/determine_the_fully_qualified_hostname_of_the_local_machine_in_c.html
13+
size_t hostname_len=128;
14+
char* hostname=0;
15+
while (1) {
16+
// (Re)allocate buffer of length hostname_len.
17+
char* realloc_hostname=(char*)realloc(hostname,hostname_len);
18+
if (realloc_hostname==0) {
19+
free(hostname);
20+
fatal_error("Failed to get hostname (out of memory)");
21+
}
22+
hostname=realloc_hostname;
23+
24+
// Terminate the buffer.
25+
hostname[hostname_len-1]=0;
26+
27+
// Offer all but the last byte of the buffer to gethostname.
28+
if (gethostname(hostname,hostname_len-1)==0) {
29+
size_t count=strlen(hostname);
30+
if (count<hostname_len-2) {
31+
// Break from loop if hostname definitely not truncated
32+
break;
33+
}
34+
}
35+
36+
// Double size of buffer and try again.
37+
hostname_len*=2;
38+
}
39+
h = std::string(hostname);
40+
free(hostname);
41+
}
42+
return h;
43+
}
44+
45+
46+
}

test/unit_tests/run_all.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ set -o pipefail
2424
./util/PerfStats
2525
./util/error
2626
./util/memutils
27+
./util/environment -hostname $(hostname)
2728
./param/sstd_param
2829
./pserver/PSglobalFunctionIndexMap
2930
./pserver/global_anomaly_stats
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#pragma once
2+
3+
//Include this header to get access to the cmdline args (providing they are set by the main program)
4+
extern int _argc;
5+
extern char** _argv;

test/unit_tests/unit_test_main.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
#include "gtest/gtest.h"
22
#include "chimbuko/verbose.hpp"
3+
#include "unit_test_cmdline.hpp"
4+
5+
int _argc;
6+
char** _argv;
37

48
int main(int argc, char **argv) {
59
chimbuko::enableVerboseLogging() = true;
610
::testing::InitGoogleTest(&argc, argv);
11+
_argc = argc;
12+
_argv = argv;
713
return RUN_ALL_TESTS();
814
}

0 commit comments

Comments
 (0)