Skip to content

Commit 0687766

Browse files
committed
Added ProvDBpruneGlobalStats class that rebuilds function anomaly statistics from anomaly records
ProvDBpruneInterface can optionally be passed a pointer to a ProvDBpruneGlobalStats for the regen of anomaly metrics ProvDBprune now contains a ProvDBpruneGlobalStats as a member, which is accumulated over the shards. It now updates both normal and anomaly data and regenerates anomaly metrics with insertion into global DB, and so is "complete" up to testing Extended ProvDBpruneInterface unit test for anomaly metrics capture and summarization
1 parent 92e3ac6 commit 0687766

9 files changed

Lines changed: 169 additions & 22 deletions

File tree

include/Makefile.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
nobase_include_HEADERS = chimbuko/modules/performance_analysis/chimbuko.hpp chimbuko/modules/performance_analysis/ad/FuncAnomalyMetrics.hpp chimbuko/modules/performance_analysis/ad/ADLocalAnomalyMetrics.hpp chimbuko/modules/performance_analysis/ad/FuncStats.hpp chimbuko/modules/performance_analysis/ad/ADAnomalyProvenance.hpp chimbuko/modules/performance_analysis/ad/ADParser.hpp chimbuko/modules/performance_analysis/ad/ADMonitoring.hpp chimbuko/modules/performance_analysis/ad/ADNormalEventProvenance.hpp chimbuko/modules/performance_analysis/ad/ADLocalFuncStatistics.hpp chimbuko/modules/performance_analysis/ad/ADMetadataParser.hpp chimbuko/modules/performance_analysis/ad/AnomalyData.hpp chimbuko/modules/performance_analysis/ad/ADDefine.hpp chimbuko/modules/performance_analysis/ad/ADglobalFunctionIndexMap.hpp chimbuko/modules/performance_analysis/ad/ADExecDataInterface.hpp chimbuko/modules/performance_analysis/ad/ADcombinedPSdata.hpp chimbuko/modules/performance_analysis/ad/ADEvent.hpp chimbuko/modules/performance_analysis/ad/ADCounter.hpp chimbuko/modules/performance_analysis/ad/ADLocalCounterStatistics.hpp chimbuko/modules/performance_analysis/ad/ExecData.hpp chimbuko/modules/performance_analysis/provdb/ProvDBmoduleSetup.hpp chimbuko/modules/performance_analysis/provdb/ProvDBprune.hpp chimbuko/modules/performance_analysis/provdb/ProvDBpruneInterface.hpp chimbuko/modules/performance_analysis/module.hpp chimbuko/modules/performance_analysis/pserver/PSmoduleDataManager.hpp chimbuko/modules/performance_analysis/pserver/GlobalAnomalyStats.hpp chimbuko/modules/performance_analysis/pserver/AggregateFuncAnomalyMetrics.hpp chimbuko/modules/performance_analysis/pserver/PSglobalFunctionIndexMap.hpp chimbuko/modules/performance_analysis/pserver/AggregateFuncStats.hpp chimbuko/modules/performance_analysis/pserver/AggregateAnomalyData.hpp chimbuko/modules/performance_analysis/pserver/NetPayloadRecvCombinedADdata.hpp chimbuko/modules/performance_analysis/pserver/PScommon.hpp chimbuko/modules/performance_analysis/pserver/FunctionProfile.hpp chimbuko/modules/performance_analysis/pserver/GlobalAnomalyMetrics.hpp chimbuko/modules/performance_analysis/pserver/AggregateFuncAnomalyMetricsAllRanks.hpp chimbuko/modules/performance_analysis/pserver/GlobalCounterStats.hpp chimbuko/modules/performance_analysis/AD.hpp chimbuko/modules/performance_analysis/pserver.hpp chimbuko/modules/factory.hpp chimbuko/core/chimbuko.hpp chimbuko/core/ad/ADOutlier.hpp chimbuko/core/ad/ADNetClient.hpp chimbuko/core/ad/ADDataInterface.hpp chimbuko/core/ad/ADProvenanceDBclient.hpp chimbuko/core/ad/ADcmdLineArgs.hpp chimbuko/core/ad/utils.hpp chimbuko/core/ad/ADio.hpp chimbuko/core/provdb/ProvDBclient.hpp chimbuko/core/provdb/ProvDBpruneCore.hpp chimbuko/core/provdb/ProvDBmoduleSetupCore.hpp chimbuko/core/provdb/ProvDButils.hpp chimbuko/core/provdb/ProvDBengine.hpp chimbuko/core/provdb/setup.hpp chimbuko/core/verbose.hpp chimbuko/core/pserver/PSglobalProvenanceDBclient.hpp chimbuko/core/pserver/PSshardProvenanceDBclient.hpp chimbuko/core/pserver/PSmoduleDataManagerCore.hpp chimbuko/core/pserver/PSparamManager.hpp chimbuko/core/pserver/PSstatSender.hpp chimbuko/core/param/sstd_param.hpp chimbuko/core/param/copod_param.hpp chimbuko/core/param/hbos_param.hpp chimbuko/core/message.hpp chimbuko/core/net.hpp chimbuko/core/pserver.hpp chimbuko/core/provdb.hpp chimbuko/core/param.hpp chimbuko/core/net/zmqme_net.hpp chimbuko/core/net/mpi_net.hpp chimbuko/core/net/zmq_net.hpp chimbuko/core/net/local_net.hpp chimbuko/core/util/chunkAllocator.hpp chimbuko/core/util/RunStats.hpp chimbuko/core/util/ADIOS2parseUtils.hpp chimbuko/core/util/json.hpp chimbuko/core/util/environment.hpp chimbuko/core/util/pointerRegistry.hpp chimbuko/core/util/time.hpp chimbuko/core/util/map.hpp chimbuko/core/util/error.hpp chimbuko/core/util/string.hpp chimbuko/core/util/DispatchQueue.hpp chimbuko/core/util/PerfStats.hpp chimbuko/core/util/curlJsonSender.hpp chimbuko/core/util/RunMetric.hpp chimbuko/core/util/memutils.hpp chimbuko/core/util/Histogram.hpp chimbuko/core/util/barrier.hpp chimbuko/core/util/threadPool.hpp chimbuko/core/util/hash.hpp chimbuko/core/util/mtQueue.hpp chimbuko/core/util/serialize.hpp chimbuko/core/util/commandLineParser.hpp
1+
nobase_include_HEADERS = chimbuko/modules/performance_analysis/chimbuko.hpp chimbuko/modules/performance_analysis/ad/FuncAnomalyMetrics.hpp chimbuko/modules/performance_analysis/ad/ADLocalAnomalyMetrics.hpp chimbuko/modules/performance_analysis/ad/FuncStats.hpp chimbuko/modules/performance_analysis/ad/ADAnomalyProvenance.hpp chimbuko/modules/performance_analysis/ad/ADParser.hpp chimbuko/modules/performance_analysis/ad/ADMonitoring.hpp chimbuko/modules/performance_analysis/ad/ADNormalEventProvenance.hpp chimbuko/modules/performance_analysis/ad/ADLocalFuncStatistics.hpp chimbuko/modules/performance_analysis/ad/ADMetadataParser.hpp chimbuko/modules/performance_analysis/ad/AnomalyData.hpp chimbuko/modules/performance_analysis/ad/ADDefine.hpp chimbuko/modules/performance_analysis/ad/ADglobalFunctionIndexMap.hpp chimbuko/modules/performance_analysis/ad/ADExecDataInterface.hpp chimbuko/modules/performance_analysis/ad/ADcombinedPSdata.hpp chimbuko/modules/performance_analysis/ad/ADEvent.hpp chimbuko/modules/performance_analysis/ad/ADCounter.hpp chimbuko/modules/performance_analysis/ad/ADLocalCounterStatistics.hpp chimbuko/modules/performance_analysis/ad/ExecData.hpp chimbuko/modules/performance_analysis/provdb/ProvDBmoduleSetup.hpp chimbuko/modules/performance_analysis/provdb/ProvDBprune.hpp chimbuko/modules/performance_analysis/provdb/ProvDBpruneGlobalStats.hpp chimbuko/modules/performance_analysis/provdb/ProvDBpruneInterface.hpp chimbuko/modules/performance_analysis/module.hpp chimbuko/modules/performance_analysis/pserver/PSmoduleDataManager.hpp chimbuko/modules/performance_analysis/pserver/GlobalAnomalyStats.hpp chimbuko/modules/performance_analysis/pserver/AggregateFuncAnomalyMetrics.hpp chimbuko/modules/performance_analysis/pserver/PSglobalFunctionIndexMap.hpp chimbuko/modules/performance_analysis/pserver/AggregateFuncStats.hpp chimbuko/modules/performance_analysis/pserver/AggregateAnomalyData.hpp chimbuko/modules/performance_analysis/pserver/NetPayloadRecvCombinedADdata.hpp chimbuko/modules/performance_analysis/pserver/PScommon.hpp chimbuko/modules/performance_analysis/pserver/FunctionProfile.hpp chimbuko/modules/performance_analysis/pserver/GlobalAnomalyMetrics.hpp chimbuko/modules/performance_analysis/pserver/AggregateFuncAnomalyMetricsAllRanks.hpp chimbuko/modules/performance_analysis/pserver/GlobalCounterStats.hpp chimbuko/modules/performance_analysis/AD.hpp chimbuko/modules/performance_analysis/pserver.hpp chimbuko/modules/factory.hpp chimbuko/core/chimbuko.hpp chimbuko/core/ad/ADOutlier.hpp chimbuko/core/ad/ADNetClient.hpp chimbuko/core/ad/ADDataInterface.hpp chimbuko/core/ad/ADProvenanceDBclient.hpp chimbuko/core/ad/ADcmdLineArgs.hpp chimbuko/core/ad/utils.hpp chimbuko/core/ad/ADio.hpp chimbuko/core/provdb/ProvDBclient.hpp chimbuko/core/provdb/ProvDBpruneCore.hpp chimbuko/core/provdb/ProvDBmoduleSetupCore.hpp chimbuko/core/provdb/ProvDButils.hpp chimbuko/core/provdb/ProvDBengine.hpp chimbuko/core/provdb/setup.hpp chimbuko/core/verbose.hpp chimbuko/core/pserver/PSglobalProvenanceDBclient.hpp chimbuko/core/pserver/PSshardProvenanceDBclient.hpp chimbuko/core/pserver/PSmoduleDataManagerCore.hpp chimbuko/core/pserver/PSparamManager.hpp chimbuko/core/pserver/PSstatSender.hpp chimbuko/core/param/sstd_param.hpp chimbuko/core/param/copod_param.hpp chimbuko/core/param/hbos_param.hpp chimbuko/core/message.hpp chimbuko/core/net.hpp chimbuko/core/pserver.hpp chimbuko/core/provdb.hpp chimbuko/core/param.hpp chimbuko/core/net/zmqme_net.hpp chimbuko/core/net/mpi_net.hpp chimbuko/core/net/zmq_net.hpp chimbuko/core/net/local_net.hpp chimbuko/core/util/chunkAllocator.hpp chimbuko/core/util/RunStats.hpp chimbuko/core/util/ADIOS2parseUtils.hpp chimbuko/core/util/json.hpp chimbuko/core/util/environment.hpp chimbuko/core/util/pointerRegistry.hpp chimbuko/core/util/time.hpp chimbuko/core/util/map.hpp chimbuko/core/util/error.hpp chimbuko/core/util/string.hpp chimbuko/core/util/DispatchQueue.hpp chimbuko/core/util/PerfStats.hpp chimbuko/core/util/curlJsonSender.hpp chimbuko/core/util/RunMetric.hpp chimbuko/core/util/memutils.hpp chimbuko/core/util/Histogram.hpp chimbuko/core/util/barrier.hpp chimbuko/core/util/threadPool.hpp chimbuko/core/util/hash.hpp chimbuko/core/util/mtQueue.hpp chimbuko/core/util/serialize.hpp chimbuko/core/util/commandLineParser.hpp

include/chimbuko/modules/performance_analysis/provdb/ProvDBprune.hpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,18 @@
22

33
#include <chimbuko_config.h>
44
#include <chimbuko/core/provdb/ProvDBpruneCore.hpp>
5+
#include <chimbuko/core/util/RunStats.hpp>
6+
#include <chimbuko/modules/performance_analysis/provdb/ProvDBpruneGlobalStats.hpp>
7+
#include <boost/functional/hash.hpp>
8+
#include <utility>
9+
#include <unordered_map>
510

611
namespace chimbuko {
712
namespace modules{
813
namespace performance_analysis{
914

1015
class ProvDBprune: public ProvDBpruneCore{
11-
public:
16+
public:
1217
/**
1318
* @brief Prune the database shard. Both the anomalies and normalexecs will be updated
1419
*/
@@ -18,7 +23,8 @@ namespace chimbuko {
1823
* @brief Update the global database with the new statistics information, overriding the old
1924
*/
2025
void finalize(sonata::Database &global_db) override;
21-
26+
private:
27+
std::unordered_map<unsigned long, ProvDBpruneGlobalStats> m_anom_metrics; /**< Map of fid -> anomaly metrics*/
2228
};
2329

2430
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#pragma once
2+
#include <chimbuko_config.h>
3+
4+
#include <chimbuko/core/util/RunStats.hpp>
5+
#include <nlohmann/json.hpp>
6+
#include <unordered_map>
7+
#include <utility>
8+
#include <boost/functional/hash.hpp>
9+
10+
namespace chimbuko {
11+
namespace modules{
12+
namespace performance_analysis{
13+
14+
/**
15+
* @brief Structure for rebuilding global anomaly statistics for a specific function
16+
*/
17+
struct ProvDBpruneGlobalStats{
18+
19+
ProvDBpruneGlobalStats();
20+
21+
/**
22+
* @brief Extract metrics information from the provided record
23+
*/
24+
void push(const nlohmann::json &record);
25+
26+
/**
27+
* @brief Generate the anomaly_metrics report for the global database
28+
*/
29+
nlohmann::json summarize() const;
30+
31+
private:
32+
std::unordered_map<std::pair<int,int>, int, boost::hash<std::pair<int,int> > > rank_anom_counts; //[rank,step]->count
33+
int first_io_step;
34+
int last_io_step;
35+
unsigned long min_timestamp;
36+
unsigned long max_timestamp;
37+
RunStats score;
38+
RunStats severity;
39+
};
40+
}
41+
}
42+
}

include/chimbuko/modules/performance_analysis/provdb/ProvDBpruneInterface.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
#include <chimbuko_config.h>
33
#include <chimbuko/core/ad/ADDataInterface.hpp>
44
#include <chimbuko/core/ad/ADOutlier.hpp>
5+
#include <chimbuko/modules/performance_analysis/provdb/ProvDBpruneGlobalStats.hpp>
56

67
#include<string>
78
#include <sonata/Database.hpp>
89

910
namespace chimbuko {
1011
namespace modules{
1112
namespace performance_analysis{
12-
1313
/**
1414
* @brief The interface class between the provDB data and the AD algorithm
1515
*/
@@ -18,8 +18,10 @@ namespace chimbuko {
1818
/**
1919
* @brief Constructor
2020
* @param prune_type The class/type of recorded event that is being pruned. Events *not* of this type will be removed from the collection after reevaluation
21+
* @param regen_stats Optionally provide a map of function index to ProvDBpruneGlobalStats to regenerate the global statistics
2122
*/
22-
ProvDBpruneInterface(const ADOutlier &ad, sonata::Database &db, ADDataInterface::EventType prune_type);
23+
ProvDBpruneInterface(const ADOutlier &ad, sonata::Database &db, ADDataInterface::EventType prune_type,
24+
std::unordered_map<unsigned long, ProvDBpruneGlobalStats>* regen_stats = nullptr);
2325

2426
/**
2527
* @brief Get the values associated with each recorded anomaly
@@ -37,13 +39,13 @@ namespace chimbuko {
3739
*/
3840
size_t getDataSetModelIndex(size_t dset_index) const;
3941

40-
4142
private:
4243
sonata::Database &m_database;
4344
std::unique_ptr<sonata::Collection> m_collection;
4445
std::unordered_map<unsigned long, std::vector<std::pair<uint64_t, double> > > m_data; //[fid] -> [ (record_id, value), ... ]
4546
const ADOutlier &m_ad; //the outlier algorithm to allow access to the model data when updating records
4647
ADDataInterface::EventType m_prune_type; //which type to prune
48+
std::unordered_map<unsigned long, ProvDBpruneGlobalStats>* m_regen_stats;
4749
};
4850

4951
}

src/Makefile.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/3rdparty @PS_FLAGS@
22
lib_LTLIBRARIES = libchimbuko.la
3-
libchimbuko_la_SOURCES = modules/performance_analysis/ad/ADMetadataParser.cpp modules/performance_analysis/ad/ADLocalCounterStatistics.cpp modules/performance_analysis/ad/ADMonitoring.cpp modules/performance_analysis/ad/ADEvent.cpp modules/performance_analysis/ad/ADglobalFunctionIndexMap.cpp modules/performance_analysis/ad/ADExecDataInterface.cpp modules/performance_analysis/ad/AnomalyData.cpp modules/performance_analysis/ad/ADParser.cpp modules/performance_analysis/ad/ADNormalEventProvenance.cpp modules/performance_analysis/ad/ExecData.cpp modules/performance_analysis/ad/ADCounter.cpp modules/performance_analysis/ad/ADLocalFuncStatistics.cpp modules/performance_analysis/ad/ADLocalAnomalyMetrics.cpp modules/performance_analysis/ad/ADAnomalyProvenance.cpp modules/performance_analysis/ad/ADcombinedPSdata.cpp modules/performance_analysis/ad/FuncStats.cpp modules/performance_analysis/ad/FuncAnomalyMetrics.cpp modules/performance_analysis/provdb/ProvDBprune.cpp modules/performance_analysis/provdb/ProvDBmoduleSetup.cpp modules/performance_analysis/provdb/ProvDBpruneInterface.cpp modules/performance_analysis/pserver/FunctionProfile.cpp modules/performance_analysis/pserver/GlobalCounterStats.cpp modules/performance_analysis/pserver/GlobalAnomalyStats.cpp modules/performance_analysis/pserver/GlobalAnomalyMetrics.cpp modules/performance_analysis/pserver/AggregateFuncAnomalyMetricsAllRanks.cpp modules/performance_analysis/pserver/PScommon.cpp modules/performance_analysis/pserver/NetPayloadRecvCombinedADdata.cpp modules/performance_analysis/pserver/PSglobalFunctionIndexMap.cpp modules/performance_analysis/pserver/PSmoduleDataManager.cpp modules/performance_analysis/pserver/AggregateFuncAnomalyMetrics.cpp modules/performance_analysis/pserver/AggregateAnomalyData.cpp modules/performance_analysis/pserver/AggregateFuncStats.cpp modules/performance_analysis/chimbuko.cpp modules/factory.cpp core/net.cpp core/ad/ADProvenanceDBclient.cpp core/ad/utils.cpp core/ad/ADNetClient.cpp core/ad/ADOutlier.cpp core/ad/ADDataInterface.cpp core/ad/ADcmdLineArgs.cpp core/ad/ADio.cpp core/provdb/ProvDBclient.cpp core/provdb/ProvDButils.cpp core/provdb/ProvDBengine.cpp core/provdb/ProvDBpruneCore.cpp core/pserver/PSglobalProvenanceDBclient.cpp core/pserver/PSstatSender.cpp core/pserver/PSparamManager.cpp core/pserver/PSshardProvenanceDBclient.cpp core/param/sstd_param.cpp core/param/hbos_param.cpp core/param/copod_param.cpp core/message.cpp core/chimbuko.cpp core/param.cpp core/net/zmq_net.cpp core/net/local_net.cpp core/net/zmqme_net.cpp core/net/mpi_net.cpp core/util/time.cpp core/util/string.cpp core/util/memutils.cpp core/util/RunStats.cpp core/util/environment.cpp core/util/DispatchQueue.cpp core/util/ADIOS2parseUtils.cpp core/util/json.cpp core/util/curlJsonSender.cpp core/util/PerfStats.cpp core/util/map.cpp core/util/error.cpp core/util/Histogram.cpp
3+
libchimbuko_la_SOURCES = modules/performance_analysis/ad/ADMetadataParser.cpp modules/performance_analysis/ad/ADLocalCounterStatistics.cpp modules/performance_analysis/ad/ADMonitoring.cpp modules/performance_analysis/ad/ADEvent.cpp modules/performance_analysis/ad/ADglobalFunctionIndexMap.cpp modules/performance_analysis/ad/ADExecDataInterface.cpp modules/performance_analysis/ad/AnomalyData.cpp modules/performance_analysis/ad/ADParser.cpp modules/performance_analysis/ad/ADNormalEventProvenance.cpp modules/performance_analysis/ad/ExecData.cpp modules/performance_analysis/ad/ADCounter.cpp modules/performance_analysis/ad/ADLocalFuncStatistics.cpp modules/performance_analysis/ad/ADLocalAnomalyMetrics.cpp modules/performance_analysis/ad/ADAnomalyProvenance.cpp modules/performance_analysis/ad/ADcombinedPSdata.cpp modules/performance_analysis/ad/FuncStats.cpp modules/performance_analysis/ad/FuncAnomalyMetrics.cpp modules/performance_analysis/provdb/ProvDBprune.cpp modules/performance_analysis/provdb/ProvDBpruneGlobalStats.cpp modules/performance_analysis/provdb/ProvDBmoduleSetup.cpp modules/performance_analysis/provdb/ProvDBpruneInterface.cpp modules/performance_analysis/pserver/FunctionProfile.cpp modules/performance_analysis/pserver/GlobalCounterStats.cpp modules/performance_analysis/pserver/GlobalAnomalyStats.cpp modules/performance_analysis/pserver/GlobalAnomalyMetrics.cpp modules/performance_analysis/pserver/AggregateFuncAnomalyMetricsAllRanks.cpp modules/performance_analysis/pserver/PScommon.cpp modules/performance_analysis/pserver/NetPayloadRecvCombinedADdata.cpp modules/performance_analysis/pserver/PSglobalFunctionIndexMap.cpp modules/performance_analysis/pserver/PSmoduleDataManager.cpp modules/performance_analysis/pserver/AggregateFuncAnomalyMetrics.cpp modules/performance_analysis/pserver/AggregateAnomalyData.cpp modules/performance_analysis/pserver/AggregateFuncStats.cpp modules/performance_analysis/chimbuko.cpp modules/factory.cpp core/net.cpp core/ad/ADProvenanceDBclient.cpp core/ad/utils.cpp core/ad/ADNetClient.cpp core/ad/ADOutlier.cpp core/ad/ADDataInterface.cpp core/ad/ADcmdLineArgs.cpp core/ad/ADio.cpp core/provdb/ProvDBclient.cpp core/provdb/ProvDButils.cpp core/provdb/ProvDBengine.cpp core/provdb/ProvDBpruneCore.cpp core/pserver/PSglobalProvenanceDBclient.cpp core/pserver/PSstatSender.cpp core/pserver/PSparamManager.cpp core/pserver/PSshardProvenanceDBclient.cpp core/param/sstd_param.cpp core/param/hbos_param.cpp core/param/copod_param.cpp core/message.cpp core/chimbuko.cpp core/param.cpp core/net/zmq_net.cpp core/net/local_net.cpp core/net/zmqme_net.cpp core/net/mpi_net.cpp core/util/time.cpp core/util/string.cpp core/util/memutils.cpp core/util/RunStats.cpp core/util/environment.cpp core/util/DispatchQueue.cpp core/util/ADIOS2parseUtils.cpp core/util/json.cpp core/util/curlJsonSender.cpp core/util/PerfStats.cpp core/util/map.cpp core/util/error.cpp core/util/Histogram.cpp
44
libchimbuko_la_LDFLAGS = -version-info 3:0:0

src/modules/performance_analysis/provdb/ProvDBprune.cpp

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,47 @@
11
#include<chimbuko/modules/performance_analysis/provdb/ProvDBprune.hpp>
22
#include<chimbuko/modules/performance_analysis/provdb/ProvDBpruneInterface.hpp>
33
#include<chimbuko/core/util/error.hpp>
4+
#include<limits>
45

56
using namespace chimbuko;
67
using namespace chimbuko::modules::performance_analysis;
7-
8+
89
void ProvDBprune::pruneImplementation(ADOutlier &ad, sonata::Database &db){
9-
//Prune the outliers and update scores / model on remaining
10-
ProvDBpruneInterface pi(ad, db, ADDataInterface::EventType::Outlier);
11-
ad.run(pi);
12-
10+
//Prune the outliers and update scores / model on remaining. Also gather new anomaly statistics
11+
{
12+
ProvDBpruneInterface po(ad, db, ADDataInterface::EventType::Outlier, &m_anom_metrics);
13+
ad.run(po);
14+
}
1315
//Prune normal execs and update scores / model on remaining
14-
15-
16-
17-
18-
//Reparse outliers collection for statistics
19-
20-
16+
{
17+
ProvDBpruneInterface pn(ad, db, ADDataInterface::EventType::Normal);
18+
ad.run(pn);
19+
}
2120
}
2221

2322
void ProvDBprune::finalize(sonata::Database &global_db){
2423
//Update anomaly information statistics in global database
25-
24+
sonata::Collection coll = global_db.open("func_stats");
25+
//fetch, modify, update
26+
std::vector<std::string> rstr;
27+
coll.all(&rstr);
28+
std::vector<uint64_t> ids(rstr.size());
29+
30+
for(size_t i = 0; i < rstr.size(); i++){
31+
nlohmann::json rec = nlohmann::json::parse(rstr[i]);
32+
unsigned long fid = rec["fid"].template get<unsigned long>();
33+
ids[i] = rec["__id"].template get<uint64_t>();
34+
35+
auto it = m_anom_metrics.find(fid);
36+
37+
//If there are no anomalies for this function we should replace anomaly_metrics with a blank entry
38+
ProvDBpruneGlobalStats stats;
39+
if(it != m_anom_metrics.end()) stats = std::move(it->second);
40+
rec["anomaly_metrics"] = stats.summarize();
41+
rstr[i] = rec.dump();
42+
}
43+
std::vector<bool> updated;
44+
coll.update_multi(ids.data(), rstr, &updated, true);
2645
}
2746

2847

0 commit comments

Comments
 (0)