Skip to content

Commit bee528f

Browse files
author
Aaron Roller
authored
Merge pull request #139 from AutoModality/AM-679/no-target
fix: no target boundaries BREAKING CHANGE: default removed from configureHzStats AM-679/no-target
2 parents 9b9e817 + 80dc366 commit bee528f

5 files changed

Lines changed: 160 additions & 60 deletions

File tree

include/super_lib/am_life_cycle.h

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -164,22 +164,26 @@ class AMLifeCycle
164164
* Provide the target, which is the approximate value you expect to receive. The warnings and errors will be
165165
* provided with tolerance on both sides of the target.
166166
*
167-
* The default tolerance for warnings is 5% and for errors is 10%. Override the specific values as desired.
167+
* Configurations key use the stats short name.
168168
*
169-
* stats_short_name:
169+
* setting a target will also set a min/max 5% warn and 10% error
170+
* no target allows for just min or just max or both.
171+
*
172+
* stats_target_sets_min_max:
173+
* hz:
174+
* target: 100 # sets min_error=90,min_warn=95,max_warn=105,max_error=110
175+
*
176+
* stats_only_min:
170177
* hz:
171-
* target: 50
172178
* error:
173-
* min: 10
174-
* max: 100
179+
* min: 50
175180
* warn:
176-
* min: 20
177-
* max: 90
181+
* min: 60
182+
*
178183
*
179184
* @param stats to be configured
180-
* @param target_default provided in code for the value that will be provided unless overridden in yamls
181185
* */
182-
AMStatReset& configureHzStats(AMStatReset& stats, const int target_default);
186+
AMStatReset& configureHzStats(AMStatReset& stats);
183187

184188
virtual void heartbeatCB(const ros::TimerEvent& event);
185189

rostest/hz_config/hz_config_rostest.cpp

Lines changed: 60 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,60 +5,96 @@ class HzConfigTest : public RostestBase, am::AMLifeCycle
55
{
66
protected:
77

8-
AMStatReset hz_stats_target_ten_ = AMStatReset("default_target_ten", "Test HZ");
9-
AMStatReset hz_stats_target_one_ = AMStatReset("default_target_one", "Test HZ");
10-
AMStatReset hz_stats_target_one_hundred_ = AMStatReset("default_target_one_hundred", "Test HZ");
11-
AMStatReset hz_stats_config_target_ten_ = AMStatReset("config_target_ten", "Test HZ");
12-
AMStatReset hz_stats_config_no_target_ = AMStatReset("config_no_target", "Test HZ");
13-
8+
AMStatReset hz_stats_target_one_ = AMStatReset("target_one", "target_one");
9+
AMStatReset hz_stats_target_ten_ = AMStatReset("target_ten", "target_ten");
10+
AMStatReset hz_stats_target_one_hundred_ = AMStatReset("target_one_hundred", "target_one_hundred");
11+
AMStatReset hz_stats_no_target_ = AMStatReset("no_target", "no_target");
12+
AMStatReset hz_stats_all_provided_ = AMStatReset("all_provided", "all_provided");
13+
AMStatReset hz_stats_target_one_hundred_min_error_10_ = AMStatReset("target_one_hundred_min_error_10", "target_one_hundred_min_error_10");
14+
AMStatReset hz_stats_min_only_ = AMStatReset("min_only", "min_only");
15+
AMStatReset hz_stats_max_only_ = AMStatReset("max_only", "max_only");
16+
1417
HzConfigTest() : RostestBase() {
15-
configureHzStats(hz_stats_target_ten_,10);
16-
configureHzStats(hz_stats_target_one_,1);
17-
configureHzStats(hz_stats_target_one_hundred_,100);
18-
configureHzStats(hz_stats_config_target_ten_,999);
19-
configureHzStats(hz_stats_config_no_target_,999);
18+
configureHzStats(hz_stats_target_ten_);
19+
configureHzStats(hz_stats_target_one_);
20+
configureHzStats(hz_stats_target_one_hundred_);
21+
configureHzStats(hz_stats_no_target_);
22+
configureHzStats(hz_stats_all_provided_);
23+
configureHzStats(hz_stats_target_one_hundred_min_error_10_);
24+
configureHzStats(hz_stats_min_only_);
25+
configureHzStats(hz_stats_max_only_);
2026
}
2127

2228
};
2329

24-
TEST_F(HzConfigTest, test_default_target_ten)
30+
TEST_F(HzConfigTest, target_ten)
2531
{
2632
ASSERT_EQ(8,hz_stats_target_ten_.getMinError());
2733
ASSERT_EQ(9,hz_stats_target_ten_.getMinWarn());
2834
ASSERT_EQ(11,hz_stats_target_ten_.getMaxWarn());
2935
ASSERT_EQ(12,hz_stats_target_ten_.getMaxError());
36+
ASSERT_TRUE(hz_stats_target_ten_.isValidatingMax());
37+
ASSERT_TRUE(hz_stats_target_ten_.isValidatingMin());
3038
}
31-
TEST_F(HzConfigTest, hz_stats_target_one_)
39+
TEST_F(HzConfigTest, target_one)
3240
{
3341
ASSERT_EQ(0,hz_stats_target_one_.getMinError()) << "Shouldn't go below zero";
3442
ASSERT_EQ(0,hz_stats_target_one_.getMinWarn()) << "shouldn't go below zero";
3543
ASSERT_EQ(2,hz_stats_target_one_.getMaxWarn());
3644
ASSERT_EQ(3,hz_stats_target_one_.getMaxError());
45+
ASSERT_TRUE(hz_stats_target_one_.isValidatingMax());
46+
ASSERT_TRUE(hz_stats_target_one_.isValidatingMin());
3747
}
3848

49+
TEST_F(HzConfigTest, all_provided)
50+
{
51+
ASSERT_EQ(11,hz_stats_all_provided_.getMinError());
52+
ASSERT_EQ(22,hz_stats_all_provided_.getMinWarn());
53+
ASSERT_EQ(33,hz_stats_all_provided_.getMaxWarn());
54+
ASSERT_EQ(44,hz_stats_all_provided_.getMaxError());
55+
ASSERT_TRUE(hz_stats_all_provided_.isValidatingMax());
56+
ASSERT_TRUE(hz_stats_all_provided_.isValidatingMin());
57+
}
3958

40-
TEST_F(HzConfigTest, hz_stats_config_target_ten_)
59+
TEST_F(HzConfigTest, no_target)
4160
{
42-
ASSERT_EQ(8,hz_stats_config_target_ten_.getMinError());
43-
ASSERT_EQ(9,hz_stats_config_target_ten_.getMinWarn());
44-
ASSERT_EQ(11,hz_stats_config_target_ten_.getMaxWarn());
45-
ASSERT_EQ(12,hz_stats_config_target_ten_.getMaxError());
61+
ASSERT_FALSE(hz_stats_no_target_.isValidatingMax());
62+
ASSERT_FALSE(hz_stats_no_target_.isValidatingMin());
4663
}
4764

48-
TEST_F(HzConfigTest, config_no_target)
65+
TEST_F(HzConfigTest, min_only)
66+
{
67+
ASSERT_EQ(77,hz_stats_min_only_.getMinError());
68+
ASSERT_EQ(88,hz_stats_min_only_.getMinWarn());
69+
ASSERT_FALSE(hz_stats_min_only_.isValidatingMax());
70+
ASSERT_TRUE(hz_stats_min_only_.isValidatingMin());
71+
}
72+
TEST_F(HzConfigTest, max_only)
4973
{
50-
ASSERT_EQ(8,hz_stats_config_no_target_.getMinError());
51-
ASSERT_EQ(9,hz_stats_config_no_target_.getMinWarn());
52-
ASSERT_EQ(11,hz_stats_config_no_target_.getMaxWarn());
53-
ASSERT_EQ(12,hz_stats_config_no_target_.getMaxError());
74+
ASSERT_EQ(63,hz_stats_max_only_.getMaxError());
75+
ASSERT_EQ(51,hz_stats_max_only_.getMaxWarn());
76+
ASSERT_TRUE(hz_stats_max_only_.isValidatingMax());
77+
ASSERT_FALSE(hz_stats_max_only_.isValidatingMin());
5478
}
5579

56-
TEST_F(HzConfigTest, default_target_one_hundred)
80+
TEST_F(HzConfigTest, target_one_hundred)
5781
{
5882
ASSERT_EQ(90,hz_stats_target_one_hundred_.getMinError());
5983
ASSERT_EQ(95,hz_stats_target_one_hundred_.getMinWarn());
6084
ASSERT_EQ(105,hz_stats_target_one_hundred_.getMaxWarn());
6185
ASSERT_EQ(110,hz_stats_target_one_hundred_.getMaxError());
86+
ASSERT_TRUE(hz_stats_target_one_hundred_.isValidatingMax());
87+
ASSERT_TRUE(hz_stats_target_one_hundred_.isValidatingMin());
88+
}
89+
90+
TEST_F(HzConfigTest, target_one_hundred_min_error_10)
91+
{
92+
ASSERT_EQ(10,hz_stats_target_one_hundred_min_error_10_.getMinError());
93+
ASSERT_EQ(95,hz_stats_target_one_hundred_min_error_10_.getMinWarn());
94+
ASSERT_EQ(105,hz_stats_target_one_hundred_min_error_10_.getMaxWarn());
95+
ASSERT_EQ(110,hz_stats_target_one_hundred_min_error_10_.getMaxError());
96+
ASSERT_TRUE(hz_stats_target_one_hundred_min_error_10_.isValidatingMax());
97+
ASSERT_TRUE(hz_stats_target_one_hundred_min_error_10_.isValidatingMin());
6298
}
6399

64100
int main(int argc, char** argv)
Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,45 @@
11
hz_config_rostest:
2-
config_target_ten:
2+
target_one:
3+
hz:
4+
target: 1
5+
target_ten:
36
hz:
47
target: 10
8+
target_one_hundred:
9+
hz:
10+
target: 100
11+
12+
# no validation stat
13+
no_target:
14+
something_else: "doesn't matter"
15+
16+
# no target, all boundaries declared
17+
all_provided:
18+
hz:
19+
error:
20+
min: 11
21+
max: 44
22+
warn:
23+
min: 22
24+
max: 33
525

6-
config_no_target:
26+
# prove the values are set by target, but override can happen
27+
target_one_hundred_min_error_10:
28+
hz:
29+
target: 100
30+
error:
31+
min: 10
32+
33+
min_only:
34+
hz:
35+
error:
36+
min: 77
37+
warn:
38+
min: 88
39+
40+
max_only:
741
hz:
842
error:
9-
min: 8
10-
max: 12
43+
max: 63
1144
warn:
12-
min: 9
13-
max: 11
45+
max: 51

rostest/param/param_rostest.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ class ParamTest : public RostestBase, am::AMLifeCycle
2222
TEST_F(ParamTest, test_params)
2323
{
2424
ASSERT_EQ(relative_param_,"relative_value");
25-
ASSERT_TRUE(relative_result_);
25+
ASSERT_TRUE(relative_result_) << "true since it found a configuration";
2626

2727
ASSERT_EQ(absolute_param_,"absolute_value");
28-
ASSERT_TRUE(absolute_result_);
28+
ASSERT_TRUE(absolute_result_) << "true since it found a configuration";
2929

3030
ASSERT_EQ(default_param_,default_value_);
31-
ASSERT_FALSE(default_result_);
31+
ASSERT_FALSE(default_result_) << "false since no configuration found";
3232

3333
}
3434

src/super_lib/am_life_cycle.cpp

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -365,25 +365,53 @@ void AMLifeCycle::addStatistics(diagnostic_updater::DiagnosticStatusWrapper& dsw
365365
dsw.summary((uint8_t)status, "update");
366366
}
367367

368-
AMStatReset& AMLifeCycle::configureHzStats(AMStatReset& stats, const int target_default)
369-
{
370-
int hz_target;
371-
int hz_min_error;
372-
int hz_min_warn;
373-
int hz_max_warn;
374-
int hz_max_error;
368+
AMStatReset& AMLifeCycle::configureHzStats(AMStatReset& stats)
369+
{
370+
int unassigned=UINT_MAX;
371+
int hz_target = unassigned;
372+
int hz_min_error =unassigned;
373+
int hz_min_warn=unassigned;
374+
int hz_max_warn=unassigned;
375+
int hz_max_error=unassigned;
375376
const std::string prefix = stats.getShortName();
376-
std::string hz_prefix=prefix + "/hz/";
377-
param<int>(hz_prefix + "target", hz_target, target_default);
378-
//give 5% tolerance in either direction for warning, 10% for error. Override default values as desired
379-
const int warning_offset = std::ceil(hz_target * 0.05);
380-
const int error_offset = 2 * warning_offset;
381-
//don't go below zero because that doesn't make any sense for hz.
382-
param<int>(hz_prefix + "error/min", hz_min_error, std::max(0,hz_target - error_offset));
383-
param<int>(hz_prefix + "warn/min", hz_min_warn, std::max(0,hz_target - warning_offset));
384-
param<int>(hz_prefix + "warn/max", hz_max_warn, hz_target + warning_offset);
385-
param<int>(hz_prefix + "error/max", hz_max_error, hz_target + error_offset);
386-
stats.setWarnError(hz_min_error, hz_min_warn, hz_max_warn, hz_max_error);
377+
const std::string hz_prefix=prefix + "/hz/";
378+
const std::string target_key =hz_prefix + "target";
379+
const std::string error_min_key=hz_prefix + "error/min";
380+
const std::string warn_min_key =hz_prefix + "warn/min";
381+
const std::string warn_max_key =hz_prefix + "warn/max";
382+
const std::string error_max_key=hz_prefix + "error/max";
383+
384+
//set all if target is provided
385+
if(param<int>(target_key, hz_target, 0))
386+
{
387+
//give 5% tolerance in either direction for warning, 10% for error. Override default values as desired
388+
const int warning_offset = std::ceil(hz_target * 0.05);
389+
const int error_offset = 2 * warning_offset;
390+
//don't go below zero because that doesn't make any sense for hz.
391+
hz_min_error=std::max(0,hz_target - error_offset);
392+
hz_min_warn=std::max(0,hz_target - warning_offset);
393+
hz_max_warn=hz_target + warning_offset;
394+
hz_max_error=hz_target + error_offset;
395+
stats.setWarnError(hz_min_error, hz_min_warn, hz_max_warn, hz_max_error);
396+
}
397+
//override individual boundary configs if provided
398+
if(param<int>(error_min_key, hz_min_error, hz_min_error))
399+
{
400+
stats.setMinError(hz_min_error);
401+
}
402+
if(param<int>(warn_min_key, hz_min_warn, hz_min_warn))
403+
{
404+
stats.setMinWarn(hz_min_warn);
405+
}
406+
if(param<int>(warn_max_key, hz_max_warn, hz_max_warn))
407+
{
408+
stats.setMaxWarn(hz_max_warn);
409+
}
410+
if(param<int>(error_max_key, hz_max_error, hz_max_error))
411+
{
412+
stats.setMaxError(hz_max_error);
413+
}
414+
387415
return stats;
388416
}
389417
void AMLifeCycle::sendNodeUpdate()

0 commit comments

Comments
 (0)