Skip to content

Commit b6cb560

Browse files
author
Aaron Roller
authored
Merge pull request #153 from AutoModality/AM-777/configure_stat
feat: configure stat and hz stat AM-777/configure_stat
2 parents 1a8ee40 + 04b5aed commit b6cb560

15 files changed

Lines changed: 141 additions & 87 deletions

File tree

include/super_lib/am_life_cycle.h

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ class AMLifeCycle
7474
void cleanup();
7575
void sendNodeUpdate();
7676
void error(std::string message, std::string error_code, bool forced = false);
77+
void configureStat(AMStat& stat, std::string name, std::string category="");
7778

7879
protected:
7980
std::string node_name_;
@@ -179,12 +180,16 @@ class AMLifeCycle
179180
/**Initialize statistics by adding to the list*/
180181
virtual void addStatistics(diagnostic_updater::DiagnosticStatusWrapper& dsw);
181182

183+
184+
[[deprecated("configureHzStat with the stat's long name in the yaml")]]
185+
AMStatReset& configureHzStats(AMStatReset& stats);
186+
182187
/** Initialize the stats that reset once per second providing the equivalent of rostopic hz to ensure frequency of
183188
* publishing. Allows for overriding values in roslaunch configurations.
184189
* Provide the target, which is the approximate value you expect to receive. The warnings and errors will be
185190
* provided with tolerance on both sides of the target.
186191
*
187-
* Configurations key use the stats short name.
192+
* Configurations key use the stats long name.
188193
*
189194
* setting a target will also set a min/max 5% warn and 10% error
190195
* no target allows for just min or just max or both.
@@ -202,8 +207,20 @@ class AMLifeCycle
202207
*
203208
*
204209
* @param stats to be configured
205-
* */
206-
AMStatReset& configureHzStats(AMStatReset& stats);
210+
* */
211+
AMStatReset& configureHzStat(AMStatReset& stats);
212+
213+
/** Standard configuration of min/max or warn/error for a stat.
214+
*
215+
* Keyed by the stat long name in the yaml for configuration.
216+
*
217+
* my_stat:
218+
* error:
219+
* max: 85
220+
* warn:
221+
* max: 70
222+
*/
223+
void configureStat(AMStat& stat);
207224

208225
/** Called periodically by a timer defaulting to 1 second.
209226
* Useful for checking health regularly, but not during

rostest/abort_to_disarming/abort_to_disarming_rostest.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ class AbortToDisarming : public RostestBase, am::AMLifeCycle
88

99
TEST_F(AbortToDisarming, testState_AbortToDisarming)
1010
{
11-
waitUntilMissionState(brain_box_msgs::VxState::READY);
11+
waitUntilMissionState(brain_box_msgs::VxState::READY,"N3DJ");
1212
arm();
13-
waitUntilMissionState(brain_box_msgs::VxState::ARMED);
13+
waitUntilMissionState(brain_box_msgs::VxState::ARMED,"XX3X");
1414
launch();
15-
waitUntilMissionState(brain_box_msgs::VxState::AUTO);
15+
waitUntilMissionState(brain_box_msgs::VxState::AUTO,"YYUI");
1616
abort();
17-
waitUntilMissionState(brain_box_msgs::VxState::ABORT);
17+
waitUntilMissionState(brain_box_msgs::VxState::ABORT,"NSKE");
1818
landed();
19-
waitUntilMissionState(brain_box_msgs::VxState::DISARMING);
19+
waitUntilMissionState(brain_box_msgs::VxState::DISARMING,"XXCV");
2020
}
2121

2222
int main(int argc, char** argv)

rostest/abort_to_manual/abort_to_manual_rostest.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ class AbortToManual : public RostestBase, am::AMLifeCycle
88

99
TEST_F(AbortToManual, testState_AbortToDisarming)
1010
{
11-
waitUntilMissionState(brain_box_msgs::VxState::READY);
11+
waitUntilMissionState(brain_box_msgs::VxState::READY,"SNED");
1212
arm();
13-
waitUntilMissionState(brain_box_msgs::VxState::ARMED);
13+
waitUntilMissionState(brain_box_msgs::VxState::ARMED,"SNES");
1414
launch();
15-
waitUntilMissionState(brain_box_msgs::VxState::AUTO);
15+
waitUntilMissionState(brain_box_msgs::VxState::AUTO,"LKNK");
1616
abort();
17-
waitUntilMissionState(brain_box_msgs::VxState::ABORT);
17+
waitUntilMissionState(brain_box_msgs::VxState::ABORT,"NBWD");
1818
manual();
19-
waitUntilMissionState(brain_box_msgs::VxState::MANUAL);
19+
waitUntilMissionState(brain_box_msgs::VxState::MANUAL,"XSED");
2020
}
2121

2222
int main(int argc, char** argv)

rostest/armed_to_ready/armed_to_ready_rostest.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ class ArmedToReady : public RostestBase, am::AMLifeCycle
88

99
TEST_F(ArmedToReady, testState_ArmedToReady)
1010
{
11-
waitUntilMissionState(brain_box_msgs::VxState::READY);
11+
waitUntilMissionState(brain_box_msgs::VxState::READY,"SNWS");
1212
arm();
13-
waitUntilMissionState(brain_box_msgs::VxState::ARMED);
13+
waitUntilMissionState(brain_box_msgs::VxState::ARMED,"AXAD");
1414
cancel();
15-
waitUntilMissionState(brain_box_msgs::VxState::DISARMING);
16-
waitUntilMissionState(brain_box_msgs::VxState::READY);
15+
waitUntilMissionState(brain_box_msgs::VxState::DISARMING,"ANZD");
16+
waitUntilMissionState(brain_box_msgs::VxState::READY,"QADE");
1717
}
1818

1919
int main(int argc, char** argv)

rostest/auto_to_abort/auto_to_abort_rostest.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ TEST_F(AutoToAbort, testState_SuccessfulFlight)
1010
{
1111
waitUntil(LifeCycleState::CONFIGURING);
1212
waitUntil(LifeCycleState::INACTIVE);
13-
waitUntilMissionState(brain_box_msgs::VxState::READY);
13+
waitUntilMissionState(brain_box_msgs::VxState::READY,"JHDE");
1414
arm();
1515
waitUntil(LifeCycleState::ACTIVE);
16-
waitUntilMissionState(brain_box_msgs::VxState::ARMED);
16+
waitUntilMissionState(brain_box_msgs::VxState::ARMED,"HGFE");
1717
launch();
18-
waitUntilMissionState(brain_box_msgs::VxState::AUTO);
18+
waitUntilMissionState(brain_box_msgs::VxState::AUTO,"NS33");
1919
abort();
20-
waitUntilMissionState(brain_box_msgs::VxState::ABORT);
20+
waitUntilMissionState(brain_box_msgs::VxState::ABORT,"NP09");
2121
//the test launch file timeout acts as an assertion if any wait is blocked and unfinishing
2222
}
2323

rostest/auto_to_manual/auto_to_manual_rostest.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ TEST_F(AutoToManual, testState_SuccessfulFlight)
1010
{
1111
waitUntil(LifeCycleState::CONFIGURING);
1212
waitUntil(LifeCycleState::INACTIVE);
13-
waitUntilMissionState(brain_box_msgs::VxState::READY);
13+
waitUntilMissionState(brain_box_msgs::VxState::READY,"LLLE");
1414
arm();
1515
waitUntil(LifeCycleState::ACTIVE);
16-
waitUntilMissionState(brain_box_msgs::VxState::ARMED);
16+
waitUntilMissionState(brain_box_msgs::VxState::ARMED,"PWDK");
1717
launch();
18-
waitUntilMissionState(brain_box_msgs::VxState::AUTO);
18+
waitUntilMissionState(brain_box_msgs::VxState::AUTO,"ZDWD");
1919
manual();
20-
waitUntilMissionState(brain_box_msgs::VxState::MANUAL);
20+
waitUntilMissionState(brain_box_msgs::VxState::MANUAL,"ZAZD");
2121
//the test launch file timeout acts as an assertion if any wait is blocked and unfinishing
2222
}
2323

rostest/auto_to_semiauto/auto_to_semiauto_rostest.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ TEST_F(AutoToSemiAuto, testState_SuccessfulFlight)
1010
{
1111
waitUntil(LifeCycleState::CONFIGURING);
1212
waitUntil(LifeCycleState::INACTIVE);
13-
waitUntilMissionState(brain_box_msgs::VxState::READY);
13+
waitUntilMissionState(brain_box_msgs::VxState::READY,"AQIE");
1414
arm();
1515
waitUntil(LifeCycleState::ACTIVE);
16-
waitUntilMissionState(brain_box_msgs::VxState::ARMED);
16+
waitUntilMissionState(brain_box_msgs::VxState::ARMED,"IEQA");
1717
launch();
18-
waitUntilMissionState(brain_box_msgs::VxState::AUTO);
18+
waitUntilMissionState(brain_box_msgs::VxState::AUTO,"AQUE");
1919
pause();
20-
waitUntilMissionState(brain_box_msgs::VxState::SEMI_AUTO);
20+
waitUntilMissionState(brain_box_msgs::VxState::SEMI_AUTO,"AAQA");
2121
//the test launch file timeout acts as an assertion if any wait is blocked and unfinishing
2222
}
2323

rostest/error_status/error_status_rostest.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ TEST_F(LifeCycleErrorTest, testStatus_Error)
4848
waitUntil(LifeCycleStatus::ERROR,"QAQA");
4949
waitUntil(LifeCycleState::ERROR_PROCESSING,"AQ90");
5050

51-
waitUntilMissionState(brain_box_msgs::VxState::SHUTDOWN);
51+
waitUntilMissionState(brain_box_msgs::VxState::SHUTDOWN,"AQAL");
5252
}
5353

5454
int main(int argc, char** argv)

rostest/error_status_without_stats/error_status_without_stats_rostest.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ TEST_F(LifeCycleErrorTestWithoutStats, testStatus_Error)
1111
{
1212
waitUntil(LifeCycleState::CONFIGURING);
1313
waitUntil(LifeCycleState::INACTIVE);
14-
waitUntilMissionState(brain_box_msgs::VxState::READY);
14+
waitUntilMissionState(brain_box_msgs::VxState::READY,"ANQP");
1515

16-
error("HEOL");
16+
errorTerminal("forcing error","HEOL");
1717
waitUntil(LifeCycleStatus::ERROR,"QNA0");
1818
waitUntil(LifeCycleState::ERROR_PROCESSING);
1919

20-
waitUntilMissionState(brain_box_msgs::VxState::SHUTDOWN);
20+
waitUntilMissionState(brain_box_msgs::VxState::SHUTDOWN,"ANAQ");
2121
}
2222

2323
int main(int argc, char** argv)

rostest/hz_config/hz_config_rostest.cpp

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,20 @@ class HzConfigTest : public RostestBase, am::AMLifeCycle
1313
AMStatReset hz_stats_target_one_hundred_min_error_10_ = AMStatReset("target_one_hundred_min_error_10", "target_one_hundred_min_error_10");
1414
AMStatReset hz_stats_min_only_ = AMStatReset("min_only", "min_only");
1515
AMStatReset hz_stats_max_only_ = AMStatReset("max_only", "max_only");
16+
AMStat stat_none_ = AMStat("stat_none", "stat_none");
17+
AMStat stat_none_with_default_max_ = AMStat("stat_none_with_default_max", "stat_none_with_default_max",15,20);
1618

1719
HzConfigTest() : RostestBase() {
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_);
20+
configureHzStat(hz_stats_target_ten_);
21+
configureHzStat(hz_stats_target_one_);
22+
configureHzStat(hz_stats_target_one_hundred_);
23+
configureHzStat(hz_stats_no_target_);
24+
configureHzStat(hz_stats_all_provided_);
25+
configureHzStat(hz_stats_target_one_hundred_min_error_10_);
26+
configureHzStat(hz_stats_min_only_);
27+
configureHzStat(hz_stats_max_only_);
28+
configureStat(stat_none_);
29+
configureStat(stat_none_with_default_max_);
2630
}
2731

2832
};
@@ -62,6 +66,20 @@ TEST_F(HzConfigTest, no_target)
6266
ASSERT_FALSE(hz_stats_no_target_.isValidatingMin());
6367
}
6468

69+
TEST_F(HzConfigTest, stat_none)
70+
{
71+
ASSERT_FALSE(stat_none_.isValidatingMax());
72+
ASSERT_FALSE(stat_none_.isValidatingMin());
73+
}
74+
TEST_F(HzConfigTest, stat_none_with_default_max)
75+
{
76+
ASSERT_TRUE(stat_none_with_default_max_.isValidatingMax());
77+
ASSERT_FALSE(stat_none_with_default_max_.isValidatingMin());
78+
//magic numbers provided upon initialization of stat
79+
ASSERT_EQ(stat_none_with_default_max_.getMaxWarn(),15);
80+
ASSERT_EQ(stat_none_with_default_max_.getMaxError(),20);
81+
}
82+
6583
TEST_F(HzConfigTest, min_only)
6684
{
6785
ASSERT_EQ(77,hz_stats_min_only_.getMinError());

0 commit comments

Comments
 (0)