Implement sub-second check intervals.

Fixes #3656
This commit is contained in:
Gunnar Beutner 2013-02-08 10:14:24 +01:00
parent dd9c7b9846
commit 601c7d25d1
8 changed files with 179 additions and 153 deletions

View File

@ -36,7 +36,7 @@ void CheckerComponent::Start(void)
DynamicObject::OnUnregistered.connect(bind(&CheckerComponent::ObjectRemovedHandler, this, _1)); DynamicObject::OnUnregistered.connect(bind(&CheckerComponent::ObjectRemovedHandler, this, _1));
m_CheckTimer = boost::make_shared<Timer>(); m_CheckTimer = boost::make_shared<Timer>();
m_CheckTimer->SetInterval(1); m_CheckTimer->SetInterval(0.1);
m_CheckTimer->OnTimerExpired.connect(boost::bind(&CheckerComponent::CheckTimerHandler, this)); m_CheckTimer->OnTimerExpired.connect(boost::bind(&CheckerComponent::CheckTimerHandler, this));
m_CheckTimer->Start(); m_CheckTimer->Start();
@ -129,6 +129,8 @@ void CheckerComponent::CheckTimerHandler(void)
msgbuf << "CheckTimerHandler: created " << tasks << " task(s)"; msgbuf << "CheckTimerHandler: created " << tasks << " task(s)";
Logger::Write(LogInformation, "checker", msgbuf.str()); Logger::Write(LogInformation, "checker", msgbuf.str());
} }
RescheduleCheckTimer();
} }
void CheckerComponent::CheckCompletedHandler(const Service::Ptr& service) void CheckerComponent::CheckCompletedHandler(const Service::Ptr& service)
@ -182,6 +184,8 @@ void CheckerComponent::NextCheckChangedHandler(const Service::Ptr& service)
idx.erase(it); idx.erase(it);
idx.insert(service); idx.insert(service);
RescheduleCheckTimer();
} }
void CheckerComponent::ObjectRemovedHandler(const DynamicObject::Ptr& object) void CheckerComponent::ObjectRemovedHandler(const DynamicObject::Ptr& object)
@ -195,3 +199,17 @@ void CheckerComponent::ObjectRemovedHandler(const DynamicObject::Ptr& object)
m_IdleServices.erase(service); m_IdleServices.erase(service);
m_PendingServices.erase(service); m_PendingServices.erase(service);
} }
void CheckerComponent::RescheduleCheckTimer(void)
{
if (m_IdleServices.empty())
return;
typedef nth_index<ServiceSet, 1>::type CheckTimeView;
CheckTimeView& idx = boost::get<1>(m_IdleServices);
CheckTimeView::iterator it = idx.begin();
Service::Ptr service = *it;
m_CheckTimer->Reschedule(service->GetNextCheck());
}

View File

@ -76,6 +76,8 @@ private:
void CheckerChangedHandler(const Service::Ptr& service); void CheckerChangedHandler(const Service::Ptr& service);
void NextCheckChangedHandler(const Service::Ptr& service); void NextCheckChangedHandler(const Service::Ptr& service);
void ObjectRemovedHandler(const DynamicObject::Ptr& object); void ObjectRemovedHandler(const DynamicObject::Ptr& object);
void RescheduleCheckTimer(void);
}; };
} }

View File

@ -56,7 +56,7 @@ Example:
2.5m 2.5m
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Supported suffixes include s (seconds), m (minutes) and h (hours). Supported suffixes include ms (milliseconds), s (seconds), m (minutes) and h (hours).
String Literals String Literals
^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^

View File

@ -62,7 +62,10 @@ double Timer::ProcessTimers(void)
* timer call took - we need to fetch the current time */ * timer call took - we need to fetch the current time */
now = Utility::GetTime(); now = Utility::GetTime();
timer->Reschedule(now + timer->GetInterval()); double next = now + timer->GetInterval();
if (timer->m_Next < now || next < timer->m_Next)
timer->Reschedule(next);
} }
assert(timer->m_Next > now); assert(timer->m_Next > now);

View File

@ -370,8 +370,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
*yy_cp = '\0'; \ *yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp; yyg->yy_c_buf_p = yy_cp;
#define YY_NUM_RULES 39 #define YY_NUM_RULES 40
#define YY_END_OF_BUFFER 40 #define YY_END_OF_BUFFER 41
/* This struct is not used in this scanner, /* This struct is not used in this scanner,
but its presence is necessary. */ but its presence is necessary. */
struct yy_trans_info struct yy_trans_info
@ -379,25 +379,25 @@ struct yy_trans_info
flex_int32_t yy_verify; flex_int32_t yy_verify;
flex_int32_t yy_nxt; flex_int32_t yy_nxt;
}; };
static yyconst flex_int16_t yy_accept[160] = static yyconst flex_int16_t yy_accept[161] =
{ 0, { 0,
0, 0, 0, 0, 40, 38, 37, 37, 38, 38, 0, 0, 0, 0, 41, 39, 38, 38, 39, 39,
38, 20, 38, 38, 38, 26, 38, 27, 20, 20, 39, 20, 39, 39, 39, 27, 39, 28, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 34, 20, 20, 20, 20, 20, 20, 20, 20, 20, 35,
35, 37, 0, 21, 0, 0, 0, 0, 0, 20, 36, 38, 0, 21, 0, 0, 0, 0, 0, 20,
30, 28, 26, 29, 32, 0, 31, 0, 23, 24, 31, 29, 27, 30, 33, 0, 32, 0, 24, 25,
25, 0, 22, 20, 20, 20, 20, 20, 20, 20, 26, 0, 22, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 34, 33, 0, 0, 20, 20, 20, 20, 20, 20, 35, 34, 0, 0,
0, 0, 0, 36, 26, 20, 6, 20, 20, 20, 0, 0, 0, 37, 27, 23, 20, 6, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
0, 0, 0, 0, 20, 20, 20, 20, 20, 16, 0, 0, 0, 0, 0, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 18, 1, 0, 0, 0, 16, 20, 20, 20, 20, 20, 18, 1, 0, 0,
0, 0, 20, 20, 19, 20, 11, 20, 20, 20, 0, 0, 0, 20, 20, 19, 20, 11, 20, 20,
20, 20, 0, 0, 0, 0, 0, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 20, 20,
3, 12, 20, 5, 4, 0, 0, 0, 0, 0, 20, 3, 12, 20, 5, 4, 0, 0, 0, 0,
20, 20, 20, 17, 13, 14, 0, 8, 0, 10, 0, 20, 20, 20, 17, 13, 14, 0, 8, 0,
20, 15, 0, 0, 20, 9, 7, 2, 0 10, 20, 15, 0, 0, 20, 9, 7, 2, 0
} ; } ;
static yyconst flex_int32_t yy_ec[256] = static yyconst flex_int32_t yy_ec[256] =
@ -440,134 +440,136 @@ static yyconst flex_int32_t yy_meta[40] =
4, 4, 4, 4, 4, 4, 4, 4, 4 4, 4, 4, 4, 4, 4, 4, 4, 4
} ; } ;
static yyconst flex_int16_t yy_base[166] = static yyconst flex_int16_t yy_base[167] =
{ 0, { 0,
0, 0, 273, 272, 278, 281, 38, 40, 273, 18, 0, 0, 274, 273, 279, 282, 38, 40, 274, 18,
27, 261, 260, 35, 41, 39, 258, 281, 258, 39, 27, 262, 261, 35, 41, 39, 259, 282, 259, 39,
40, 42, 47, 44, 48, 52, 55, 61, 57, 0, 40, 42, 47, 44, 48, 52, 55, 61, 57, 0,
261, 76, 267, 281, 240, 243, 232, 245, 248, 250, 262, 76, 268, 282, 241, 244, 233, 246, 249, 251,
281, 281, 70, 281, 281, 0, 281, 252, 281, 281, 282, 282, 70, 282, 282, 0, 282, 253, 282, 229,
281, 247, 281, 68, 69, 72, 73, 75, 74, 78, 282, 247, 282, 68, 69, 72, 73, 75, 74, 78,
71, 87, 94, 89, 95, 96, 0, 281, 242, 242, 71, 87, 94, 89, 95, 96, 0, 282, 242, 242,
224, 226, 230, 0, 101, 99, 242, 101, 103, 100, 224, 226, 230, 0, 101, 282, 99, 242, 101, 103,
102, 112, 110, 109, 118, 119, 124, 126, 127, 228, 100, 102, 112, 110, 109, 118, 119, 124, 126, 127,
221, 220, 216, 226, 128, 129, 130, 131, 136, 236, 228, 221, 220, 216, 226, 128, 129, 130, 131, 136,
138, 141, 142, 148, 143, 235, 234, 211, 229, 220, 236, 138, 141, 142, 148, 143, 235, 234, 211, 229,
219, 223, 152, 144, 228, 154, 227, 156, 157, 159, 220, 219, 223, 152, 144, 228, 154, 227, 156, 157,
161, 163, 220, 206, 220, 202, 215, 164, 166, 167, 159, 161, 163, 220, 206, 220, 202, 215, 164, 166,
200, 199, 170, 198, 197, 189, 170, 170, 184, 169, 167, 200, 199, 170, 198, 197, 189, 170, 170, 184,
168, 171, 173, 187, 281, 281, 165, 281, 169, 184, 169, 168, 171, 173, 187, 282, 282, 165, 282, 169,
176, 182, 172, 85, 177, 281, 281, 38, 281, 216, 184, 176, 182, 172, 85, 177, 282, 282, 38, 282,
220, 222, 226, 230, 234 216, 220, 222, 226, 230, 234
} ; } ;
static yyconst flex_int16_t yy_def[166] = static yyconst flex_int16_t yy_def[167] =
{ 0, { 0,
159, 1, 160, 160, 159, 159, 159, 159, 161, 159, 160, 1, 161, 161, 160, 160, 160, 160, 162, 160,
159, 162, 159, 159, 159, 159, 163, 159, 162, 162, 160, 163, 160, 160, 160, 160, 164, 160, 163, 163,
162, 162, 162, 162, 162, 162, 162, 162, 162, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 165,
159, 159, 161, 159, 159, 159, 159, 159, 159, 162, 160, 160, 162, 160, 160, 160, 160, 160, 160, 163,
159, 159, 159, 159, 159, 165, 159, 159, 159, 159, 160, 160, 160, 160, 160, 166, 160, 160, 160, 160,
159, 163, 159, 162, 162, 162, 162, 162, 162, 162, 160, 164, 160, 163, 163, 163, 163, 163, 163, 163,
162, 162, 162, 162, 162, 162, 164, 159, 159, 159, 163, 163, 163, 163, 163, 163, 165, 160, 160, 160,
159, 159, 159, 165, 159, 162, 162, 162, 162, 162, 160, 160, 160, 166, 160, 160, 163, 163, 163, 163,
162, 162, 162, 162, 162, 162, 162, 162, 162, 159, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163,
159, 159, 159, 159, 162, 162, 162, 162, 162, 162, 160, 160, 160, 160, 160, 163, 163, 163, 163, 163,
162, 162, 162, 162, 162, 162, 162, 159, 159, 159, 163, 163, 163, 163, 163, 163, 163, 163, 160, 160,
159, 159, 162, 162, 162, 162, 162, 162, 162, 162, 160, 160, 160, 163, 163, 163, 163, 163, 163, 163,
162, 162, 159, 159, 159, 159, 159, 162, 162, 162, 163, 163, 163, 160, 160, 160, 160, 160, 163, 163,
162, 162, 162, 162, 162, 159, 159, 159, 159, 159, 163, 163, 163, 163, 163, 163, 160, 160, 160, 160,
162, 162, 162, 162, 159, 159, 159, 159, 159, 162, 160, 163, 163, 163, 163, 160, 160, 160, 160, 160,
162, 162, 159, 159, 162, 159, 159, 162, 0, 159, 163, 163, 163, 160, 160, 163, 160, 160, 163, 0,
159, 159, 159, 159, 159 160, 160, 160, 160, 160, 160
} ; } ;
static yyconst flex_int16_t yy_nxt[321] = static yyconst flex_int16_t yy_nxt[322] =
{ 0, { 0,
6, 7, 8, 9, 10, 11, 12, 13, 14, 6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 6,
15, 16, 6, 17, 18, 6, 19, 20, 19, 19, 15, 16, 6, 17, 18, 6, 19, 20, 19, 19,
21, 19, 22, 19, 19, 23, 19, 24, 19, 25, 21, 19, 22, 19, 19, 23, 19, 24, 19, 25,
26, 27, 19, 19, 28, 29, 19, 19, 19, 32, 26, 27, 19, 19, 28, 29, 19, 19, 19, 32,
32, 32, 32, 35, 37, 36, 43, 45, 48, 44, 32, 32, 32, 35, 37, 36, 43, 45, 48, 44,
43, 46, 159, 159, 159, 47, 159, 54, 159, 57, 43, 46, 160, 160, 160, 47, 160, 54, 160, 57,
38, 159, 159, 49, 39, 56, 159, 50, 55, 159, 38, 160, 160, 49, 39, 56, 160, 50, 55, 160,
61, 159, 62, 51, 59, 159, 58, 32, 32, 48, 61, 160, 62, 51, 59, 160, 58, 32, 32, 48,
63, 43, 159, 159, 60, 159, 159, 159, 159, 159, 63, 43, 160, 160, 60, 160, 160, 160, 160, 160,
65, 78, 159, 81, 49, 66, 64, 84, 50, 80, 65, 79, 160, 82, 49, 66, 64, 85, 50, 81,
79, 159, 76, 159, 51, 82, 83, 77, 159, 159, 80, 160, 77, 160, 51, 83, 84, 78, 160, 160,
159, 86, 75, 159, 159, 159, 159, 159, 157, 99, 160, 87, 75, 160, 160, 160, 160, 160, 158, 100,
85, 98, 87, 159, 159, 49, 159, 89, 101, 50, 86, 99, 88, 160, 160, 49, 160, 90, 102, 50,
102, 88, 159, 159, 95, 51, 96, 97, 159, 100, 103, 89, 160, 160, 96, 51, 97, 98, 160, 101,
159, 159, 159, 159, 159, 159, 104, 106, 107, 105, 160, 160, 160, 160, 160, 160, 105, 107, 108, 106,
159, 115, 159, 103, 114, 159, 159, 159, 159, 118, 160, 116, 160, 104, 115, 160, 160, 160, 160, 119,
119, 113, 159, 117, 116, 121, 159, 120, 159, 128, 120, 114, 160, 118, 117, 122, 160, 121, 160, 129,
159, 159, 122, 159, 129, 159, 133, 159, 159, 130, 160, 160, 123, 160, 130, 160, 134, 160, 160, 131,
159, 159, 159, 141, 159, 159, 135, 159, 151, 131, 160, 160, 160, 142, 160, 160, 136, 160, 152, 132,
159, 159, 132, 156, 134, 142, 159, 144, 159, 154, 160, 160, 133, 157, 135, 143, 160, 145, 160, 155,
153, 159, 143, 150, 149, 148, 147, 152, 146, 155, 154, 160, 144, 151, 150, 149, 148, 153, 147, 156,
145, 159, 159, 159, 159, 158, 30, 30, 30, 30, 146, 160, 160, 160, 160, 159, 30, 30, 30, 30,
33, 33, 33, 33, 40, 40, 52, 52, 52, 52, 33, 33, 33, 33, 40, 40, 52, 52, 52, 52,
67, 67, 140, 67, 74, 139, 74, 74, 138, 137, 67, 67, 141, 67, 74, 140, 74, 74, 139, 138,
136, 159, 159, 127, 126, 125, 124, 123, 159, 159, 137, 160, 160, 128, 127, 126, 125, 124, 160, 160,
159, 112, 111, 110, 109, 108, 159, 94, 93, 92, 160, 113, 112, 111, 110, 109, 160, 95, 94, 93,
91, 90, 53, 75, 159, 73, 72, 71, 70, 69, 92, 91, 53, 76, 75, 160, 73, 72, 71, 70,
34, 68, 159, 53, 42, 41, 34, 159, 31, 31, 69, 34, 68, 160, 53, 42, 41, 34, 160, 31,
5, 159, 159, 159, 159, 159, 159, 159, 159, 159, 31, 5, 160, 160, 160, 160, 160, 160, 160, 160,
159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
159, 159, 159, 159, 159, 159, 159, 159, 159, 159 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
160
} ; } ;
static yyconst flex_int16_t yy_chk[321] = static yyconst flex_int16_t yy_chk[322] =
{ 0, { 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7,
7, 8, 8, 10, 11, 10, 14, 15, 16, 14, 7, 8, 8, 10, 11, 10, 14, 15, 16, 14,
16, 15, 158, 20, 21, 15, 22, 20, 24, 22, 16, 15, 159, 20, 21, 15, 22, 20, 24, 22,
11, 23, 25, 16, 11, 21, 26, 16, 20, 27, 11, 23, 25, 16, 11, 21, 26, 16, 20, 27,
26, 29, 27, 16, 24, 28, 23, 32, 32, 43, 26, 29, 27, 16, 24, 28, 23, 32, 32, 43,
28, 43, 54, 55, 25, 61, 56, 57, 59, 58, 28, 43, 54, 55, 25, 61, 56, 57, 59, 58,
29, 56, 60, 59, 43, 29, 28, 61, 43, 58, 29, 56, 60, 59, 43, 29, 28, 61, 43, 58,
57, 62, 54, 64, 43, 60, 60, 55, 63, 65, 57, 62, 54, 64, 43, 60, 60, 55, 63, 65,
66, 63, 75, 76, 80, 78, 81, 79, 154, 81, 66, 63, 75, 77, 81, 79, 82, 80, 155, 82,
62, 80, 64, 84, 83, 75, 82, 66, 83, 75, 62, 81, 64, 85, 84, 75, 83, 66, 84, 75,
84, 65, 85, 86, 76, 75, 78, 79, 87, 82, 85, 65, 86, 87, 77, 75, 79, 80, 88, 83,
88, 89, 95, 96, 97, 98, 86, 88, 89, 87, 89, 90, 96, 97, 98, 99, 87, 89, 90, 88,
99, 97, 101, 85, 96, 102, 103, 105, 114, 101, 100, 98, 102, 86, 97, 103, 104, 106, 115, 102,
102, 95, 104, 99, 98, 104, 113, 103, 116, 113, 103, 96, 105, 100, 99, 105, 114, 104, 117, 114,
118, 119, 105, 120, 114, 121, 120, 122, 128, 116, 119, 120, 106, 121, 115, 122, 121, 123, 129, 117,
129, 130, 141, 128, 133, 142, 122, 143, 142, 118, 130, 131, 142, 129, 134, 143, 123, 144, 143, 119,
151, 155, 119, 153, 121, 129, 152, 133, 150, 149, 152, 156, 120, 154, 122, 130, 153, 134, 151, 150,
147, 144, 130, 141, 140, 139, 138, 143, 137, 151, 148, 145, 131, 142, 141, 140, 139, 144, 138, 152,
136, 135, 134, 132, 131, 155, 160, 160, 160, 160, 137, 136, 135, 133, 132, 156, 161, 161, 161, 161,
161, 161, 161, 161, 162, 162, 163, 163, 163, 163, 162, 162, 162, 162, 163, 163, 164, 164, 164, 164,
164, 164, 127, 164, 165, 126, 165, 165, 125, 124, 165, 165, 128, 165, 166, 127, 166, 166, 126, 125,
123, 117, 115, 112, 111, 110, 109, 108, 107, 106, 124, 118, 116, 113, 112, 111, 110, 109, 108, 107,
100, 94, 93, 92, 91, 90, 77, 73, 72, 71, 101, 95, 94, 93, 92, 91, 78, 73, 72, 71,
70, 69, 52, 48, 40, 39, 38, 37, 36, 35, 70, 69, 52, 50, 48, 40, 39, 38, 37, 36,
33, 31, 19, 17, 13, 12, 9, 5, 4, 3, 35, 33, 31, 19, 17, 13, 12, 9, 5, 4,
159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 3, 160, 160, 160, 160, 160, 160, 160, 160, 160,
159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
159, 159, 159, 159, 159, 159, 159, 159, 159, 159 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
160
} ; } ;
/* Table of booleans, true if rule could match eol. */ /* Table of booleans, true if rule could match eol. */
static yyconst flex_int32_t yy_rule_can_match_eol[40] = static yyconst flex_int32_t yy_rule_can_match_eol[41] =
{ 0, { 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0,
}; 0, };
/* The intent behind this definition is that it'll catch /* The intent behind this definition is that it'll catch
* any uses of REJECT which flex missed. * any uses of REJECT which flex missed.
@ -619,7 +621,7 @@ do { \
} while (0) } while (0)
#define YY_NO_UNISTD_H 1 #define YY_NO_UNISTD_H 1
#line 623 "config_lexer.cc" #line 625 "config_lexer.cc"
#define INITIAL 0 #define INITIAL 0
#define IN_C_COMMENT 1 #define IN_C_COMMENT 1
@ -868,7 +870,7 @@ YY_DECL
#line 49 "config_lexer.ll" #line 49 "config_lexer.ll"
#line 872 "config_lexer.cc" #line 874 "config_lexer.cc"
yylval = yylval_param; yylval = yylval_param;
@ -925,13 +927,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 160 ) if ( yy_current_state >= 161 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp; ++yy_cp;
} }
while ( yy_current_state != 159 ); while ( yy_current_state != 160 );
yy_cp = yyg->yy_last_accepting_cpos; yy_cp = yyg->yy_last_accepting_cpos;
yy_current_state = yyg->yy_last_accepting_state; yy_current_state = yyg->yy_last_accepting_state;
@ -1078,17 +1080,17 @@ YY_RULE_SETUP
case 23: case 23:
YY_RULE_SETUP YY_RULE_SETUP
#line 72 "config_lexer.ll" #line 72 "config_lexer.ll"
{ yylval->num = strtod(yytext, NULL) * 60 * 60; return T_NUMBER; } { yylval->num = strtod(yytext, NULL) / 1000; return T_NUMBER; }
YY_BREAK YY_BREAK
case 24: case 24:
YY_RULE_SETUP YY_RULE_SETUP
#line 73 "config_lexer.ll" #line 73 "config_lexer.ll"
{ yylval->num = strtod(yytext, NULL) * 60; return T_NUMBER; } { yylval->num = strtod(yytext, NULL) * 60 * 60; return T_NUMBER; }
YY_BREAK YY_BREAK
case 25: case 25:
YY_RULE_SETUP YY_RULE_SETUP
#line 74 "config_lexer.ll" #line 74 "config_lexer.ll"
{ yylval->num = strtod(yytext, NULL); return T_NUMBER; } { yylval->num = strtod(yytext, NULL) * 60; return T_NUMBER; }
YY_BREAK YY_BREAK
case 26: case 26:
YY_RULE_SETUP YY_RULE_SETUP
@ -1098,75 +1100,80 @@ YY_RULE_SETUP
case 27: case 27:
YY_RULE_SETUP YY_RULE_SETUP
#line 76 "config_lexer.ll" #line 76 "config_lexer.ll"
{ yylval->op = OperatorSet; return T_EQUAL; } { yylval->num = strtod(yytext, NULL); return T_NUMBER; }
YY_BREAK YY_BREAK
case 28: case 28:
YY_RULE_SETUP YY_RULE_SETUP
#line 77 "config_lexer.ll" #line 77 "config_lexer.ll"
{ yylval->op = OperatorPlus; return T_PLUS_EQUAL; } { yylval->op = OperatorSet; return T_EQUAL; }
YY_BREAK YY_BREAK
case 29: case 29:
YY_RULE_SETUP YY_RULE_SETUP
#line 78 "config_lexer.ll" #line 78 "config_lexer.ll"
{ yylval->op = OperatorMinus; return T_MINUS_EQUAL; } { yylval->op = OperatorPlus; return T_PLUS_EQUAL; }
YY_BREAK YY_BREAK
case 30: case 30:
YY_RULE_SETUP YY_RULE_SETUP
#line 79 "config_lexer.ll" #line 79 "config_lexer.ll"
{ yylval->op = OperatorMultiply; return T_MULTIPLY_EQUAL; } { yylval->op = OperatorMinus; return T_MINUS_EQUAL; }
YY_BREAK YY_BREAK
case 31: case 31:
YY_RULE_SETUP YY_RULE_SETUP
#line 80 "config_lexer.ll" #line 80 "config_lexer.ll"
{ yylval->op = OperatorMultiply; return T_MULTIPLY_EQUAL; }
YY_BREAK
case 32:
YY_RULE_SETUP
#line 81 "config_lexer.ll"
{ yylval->op = OperatorDivide; return T_DIVIDE_EQUAL; } { yylval->op = OperatorDivide; return T_DIVIDE_EQUAL; }
YY_BREAK YY_BREAK
case 32: case 33:
YY_RULE_SETUP YY_RULE_SETUP
#line 83 "config_lexer.ll" #line 84 "config_lexer.ll"
BEGIN(IN_C_COMMENT); BEGIN(IN_C_COMMENT);
YY_BREAK YY_BREAK
case 33:
YY_RULE_SETUP
#line 87 "config_lexer.ll"
BEGIN(INITIAL);
YY_BREAK
case 34: case 34:
/* rule 34 can match eol */
YY_RULE_SETUP YY_RULE_SETUP
#line 88 "config_lexer.ll" #line 88 "config_lexer.ll"
/* ignore comment */ BEGIN(INITIAL);
YY_BREAK YY_BREAK
case 35: case 35:
/* rule 35 can match eol */
YY_RULE_SETUP YY_RULE_SETUP
#line 89 "config_lexer.ll" #line 89 "config_lexer.ll"
/* ignore comment */
YY_BREAK
case 36:
YY_RULE_SETUP
#line 90 "config_lexer.ll"
/* ignore star */ /* ignore star */
YY_BREAK YY_BREAK
case 36:
YY_RULE_SETUP
#line 92 "config_lexer.ll"
/* ignore C++-style comments */
YY_BREAK
case 37: case 37:
/* rule 37 can match eol */
YY_RULE_SETUP YY_RULE_SETUP
#line 93 "config_lexer.ll" #line 93 "config_lexer.ll"
/* ignore whitespace */ /* ignore C++-style comments */
YY_BREAK YY_BREAK
case 38: case 38:
/* rule 38 can match eol */
YY_RULE_SETUP YY_RULE_SETUP
#line 95 "config_lexer.ll" #line 94 "config_lexer.ll"
return yytext[0]; /* ignore whitespace */
YY_BREAK YY_BREAK
case 39: case 39:
YY_RULE_SETUP YY_RULE_SETUP
#line 96 "config_lexer.ll" #line 96 "config_lexer.ll"
return yytext[0];
YY_BREAK
case 40:
YY_RULE_SETUP
#line 97 "config_lexer.ll"
ECHO; ECHO;
YY_BREAK YY_BREAK
#line 1170 "config_lexer.cc" #line 1177 "config_lexer.cc"
case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(IN_C_COMMENT): case YY_STATE_EOF(IN_C_COMMENT):
yyterminate(); yyterminate();
@ -1462,7 +1469,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 160 ) if ( yy_current_state >= 161 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@ -1491,11 +1498,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 160 ) if ( yy_current_state >= 161 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
yy_is_jam = (yy_current_state == 159); yy_is_jam = (yy_current_state == 160);
return yy_is_jam ? 0 : yy_current_state; return yy_is_jam ? 0 : yy_current_state;
} }
@ -2354,7 +2361,7 @@ void yyfree (void * ptr , yyscan_t yyscanner)
#define YYTABLES_NAME "yytables" #define YYTABLES_NAME "yytables"
#line 96 "config_lexer.ll" #line 97 "config_lexer.ll"

View File

@ -69,6 +69,7 @@ false { yylval->num = 0; return T_NUMBER; }
[a-zA-Z_\*][:a-zA-Z0-9\-_\*]* { yylval->text = strdup(yytext); return T_IDENTIFIER; } [a-zA-Z_\*][:a-zA-Z0-9\-_\*]* { yylval->text = strdup(yytext); return T_IDENTIFIER; }
\"[^\"]*\" { yytext[yyleng-1] = '\0'; yylval->text = strdup(yytext + 1); return T_STRING; } \"[^\"]*\" { yytext[yyleng-1] = '\0'; yylval->text = strdup(yytext + 1); return T_STRING; }
\<[^\>]*\> { yytext[yyleng-1] = '\0'; yylval->text = strdup(yytext + 1); return T_STRING_ANGLE; } \<[^\>]*\> { yytext[yyleng-1] = '\0'; yylval->text = strdup(yytext + 1); return T_STRING_ANGLE; }
-?[0-9]+(\.[0-9]+)?ms { yylval->num = strtod(yytext, NULL) / 1000; return T_NUMBER; }
-?[0-9]+(\.[0-9]+)?h { yylval->num = strtod(yytext, NULL) * 60 * 60; return T_NUMBER; } -?[0-9]+(\.[0-9]+)?h { yylval->num = strtod(yytext, NULL) * 60 * 60; return T_NUMBER; }
-?[0-9]+(\.[0-9]+)?m { yylval->num = strtod(yytext, NULL) * 60; return T_NUMBER; } -?[0-9]+(\.[0-9]+)?m { yylval->num = strtod(yytext, NULL) * 60; return T_NUMBER; }
-?[0-9]+(\.[0-9]+)?s { yylval->num = strtod(yytext, NULL); return T_NUMBER; } -?[0-9]+(\.[0-9]+)?s { yylval->num = strtod(yytext, NULL); return T_NUMBER; }

View File

@ -45,7 +45,6 @@ REGISTER_TYPE(Service, serviceAttributes);
const int Service::DefaultMaxCheckAttempts = 3; const int Service::DefaultMaxCheckAttempts = 3;
const int Service::DefaultCheckInterval = 5 * 60; const int Service::DefaultCheckInterval = 5 * 60;
const int Service::MinCheckInterval = 5;
const int Service::CheckIntervalDivisor = 5; const int Service::CheckIntervalDivisor = 5;
boost::signal<void (const Service::Ptr&, const CheckResultMessage&)> Service::OnCheckResultReceived; boost::signal<void (const Service::Ptr&, const CheckResultMessage&)> Service::OnCheckResultReceived;
@ -136,20 +135,17 @@ long Service::GetMaxCheckAttempts(void) const
return value; return value;
} }
long Service::GetCheckInterval(void) const double Service::GetCheckInterval(void) const
{ {
Value value = Get("check_interval"); Value value = Get("check_interval");
if (value.IsEmpty()) if (value.IsEmpty())
return DefaultCheckInterval; return DefaultCheckInterval;
if (value < MinCheckInterval)
value = MinCheckInterval;
return value; return value;
} }
long Service::GetRetryInterval(void) const double Service::GetRetryInterval(void) const
{ {
Value value = Get("retry_interval"); Value value = Get("retry_interval");

View File

@ -69,7 +69,6 @@ public:
static const int DefaultMaxCheckAttempts; static const int DefaultMaxCheckAttempts;
static const int DefaultCheckInterval; static const int DefaultCheckInterval;
static const int MinCheckInterval;
static const int CheckIntervalDivisor; static const int CheckIntervalDivisor;
String GetAlias(void) const; String GetAlias(void) const;
@ -79,8 +78,8 @@ public:
Dictionary::Ptr GetComments(void) const; Dictionary::Ptr GetComments(void) const;
String GetCheckCommand(void) const; String GetCheckCommand(void) const;
long GetMaxCheckAttempts(void) const; long GetMaxCheckAttempts(void) const;
long GetCheckInterval(void) const; double GetCheckInterval(void) const;
long GetRetryInterval(void) const; double GetRetryInterval(void) const;
Dictionary::Ptr GetHostDependencies(void) const; Dictionary::Ptr GetHostDependencies(void) const;
Dictionary::Ptr GetServiceDependencies(void) const; Dictionary::Ptr GetServiceDependencies(void) const;
Dictionary::Ptr GetGroups(void) const; Dictionary::Ptr GetGroups(void) const;