aboutsummaryrefslogtreecommitdiff
path: root/monitor/monitor.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'monitor/monitor.cxx')
-rw-r--r--monitor/monitor.cxx46
1 files changed, 30 insertions, 16 deletions
diff --git a/monitor/monitor.cxx b/monitor/monitor.cxx
index 7c20efe..0d5545e 100644
--- a/monitor/monitor.cxx
+++ b/monitor/monitor.cxx
@@ -14,7 +14,6 @@
#include <odb/pgsql/database.hxx>
#include <libbutl/pager.hxx>
-#include <libbutl/utility.hxx> // compare_c_string
#include <libbbot/build-config.hxx>
@@ -52,9 +51,10 @@ namespace brep
// 1: toolchain name
// 2: toolchain version (descending)
// 3: configuration name
- // 4: tenant
- // 5: package name
- // 6: package version (descending)
+ // 4: configuration target
+ // 5: tenant
+ // 6: package name
+ // 7: package version (descending)
//
struct compare_delay
{
@@ -71,6 +71,9 @@ namespace brep
if (int r = x->configuration.compare (y->configuration))
return r < 0;
+ if (int r = x->target.compare (y->target))
+ return r < 0;
+
if (int r = x->tenant.compare (y->tenant))
return r < 0;
@@ -137,25 +140,29 @@ namespace brep
// Group the printed delays by toolchain and configuration.
//
- const string* toolchain_name (nullptr);
- const version* toolchain_version (nullptr);
- const string* configuration (nullptr);
+ const string* toolchain_name (nullptr);
+ const version* toolchain_version (nullptr);
+ const string* configuration (nullptr);
+ const target_triplet* target (nullptr);
size_t config_reported_delay_count (0);
size_t config_total_delay_count (0);
auto brief_config = [&configuration,
+ &target,
&config_reported_delay_count,
&config_total_delay_count,
total] ()
{
if (configuration != nullptr)
{
+ assert (target != nullptr);
+
// Only print configurations with delays that needs to be reported.
//
if (config_reported_delay_count != 0)
{
- cerr << " " << *configuration << " ("
+ cerr << " " << *configuration << '/' << *target << " ("
<< config_reported_delay_count;
if (total)
@@ -200,23 +207,27 @@ namespace brep
toolchain_name = &d->toolchain_name;
toolchain_version = &d->toolchain_version;
configuration = nullptr;
+ target = nullptr;
}
// Print the configuration, if changed.
//
- if (configuration == nullptr || d->configuration != *configuration)
+ if (configuration == nullptr ||
+ d->configuration != *configuration ||
+ d->target != *target)
{
if (full)
{
if (configuration != nullptr)
cerr << endl;
- cerr << " " << d->configuration << endl;
+ cerr << " " << d->configuration << '/' << d->target << endl;
}
else
brief_config ();
configuration = &d->configuration;
+ target = &d->target;
}
// Print the delayed build package in the full report mode and count
@@ -494,13 +505,11 @@ namespace brep
//
if (ops.clean ())
{
- using config_map = map<const char*,
- const build_config*,
- compare_c_string>;
+ using config_map = map<build_config_id, const build_config*>;
config_map conf_map;
for (const build_config& c: configs)
- conf_map[c.name.c_str ()] = &c;
+ conf_map[build_config_id {c.name, c.target}] = &c;
// Prepare the build delay prepared query.
//
@@ -524,6 +533,7 @@ namespace brep
order_by_version (query::id.package.version,
false /* first */) + "," +
query::id.configuration + "," +
+ query::id.target + "," +
query::id.toolchain_name +
order_by_version (query::id.toolchain_version,
false /* first */) +
@@ -569,7 +579,8 @@ namespace brep
//
// Check that the build configuration is still present.
//
- (ci = conf_map.find (d.configuration.c_str ())) ==
+ (ci = conf_map.find (build_config_id {d.configuration,
+ d.target})) ==
conf_map.end ());
// Check that the package still present, is buildable and doesn't
@@ -647,10 +658,12 @@ namespace brep
using prep_bquery = prepared_query<package_build>;
build_id id;
+
const auto& bid (bquery::build::id);
bquery bq ((equal<package_build> (bid.package, id.package) &&
bid.configuration == bquery::_ref (id.configuration) &&
+ bid.target == bquery::_ref (id.target) &&
bid.toolchain_name == bquery::_ref (id.toolchain_name)) +
"ORDER BY" +
bquery::build::soft_timestamp + "DESC, " +
@@ -803,7 +816,7 @@ namespace brep
for (const pair<string, version>& t: toolchains)
{
- id = build_id (p->id, c.name, t.first, t.second);
+ id = build_id (p->id, c.name, c.target, t.first, t.second);
// If the toolchain version is unspecified then search for the
// latest build across all toolchain versions and search for a
@@ -868,6 +881,7 @@ namespace brep
move (id.package.name),
p->version,
move (id.configuration),
+ move (id.target),
move (id.toolchain_name),
t.second,
pts);