[Windows Agent] Added cron_interval to XML

This commit is contained in:
fermin831 2018-02-22 09:26:23 +01:00
parent ead21b7548
commit d53e17e118
3 changed files with 42 additions and 16 deletions

View File

@ -19,6 +19,7 @@
*/
#include <stdio.h>
#include <string.h>
#include <sstream>
#include "cron.h"
#include "../pandora.h"
@ -48,6 +49,7 @@ Cron::Cron (string cron_string) {
// Fill the cron structure
this->utimestamp = 0;
this->cronInterval = 0;
this->isSet = true;
// Months in cron are from 1 to 12. For date, are required from 0 to 11.
for (int i = 0; i < 5; i++) {
@ -86,13 +88,32 @@ Cron::Cron (string cron_string) {
*/
bool Cron::getIsSet () { return this->isSet; }
/**
* @brief Getter of cronString property
*
*/
string Cron::getCronString() { return this->cronString; }
/**
* @brief Getter of cronInterval property casting in string
*
*/
string Cron::getCronIntervalStr() {
stringstream ss;
ss << this->cronInterval;
return ss.str();
}
/**
* @brief Set utimestamp (private set)
*
* @param date
* @param date when module will be executed next time
* @param now current timestamp. Required to update interval
*/
void Cron::setUtimestamp(time_t date) {
void Cron::setUtimestamp(time_t date, time_t now) {
this->utimestamp = date;
this->cronInterval = date - now;
Pandora::pandoraDebug(
"Module with cron %s will be executed at timestamp: %d.",
this->cronString.c_str(),
@ -221,7 +242,7 @@ void Cron::update (time_t date, int interval) {
time_t nex_time = date + interval;
if (isInCron(nex_time)) {
setUtimestamp(nex_time);
setUtimestamp(nex_time, date);
return;
}
@ -239,7 +260,7 @@ void Cron::update (time_t date, int interval) {
timeinfo->tm_min = getResetValue(0);
nex_time = mktime(timeinfo);
if (nex_time >= date && isInCron(nex_time)) {
setUtimestamp(nex_time);
setUtimestamp(nex_time, date);
return;
}
@ -267,7 +288,7 @@ void Cron::update (time_t date, int interval) {
// Check the hour
if (isInCron(nex_time)) {
setUtimestamp(nex_time);
setUtimestamp(nex_time, date);
}
// Update hour if fails
@ -276,7 +297,7 @@ void Cron::update (time_t date, int interval) {
// When an overflow is passed check the hour update again
nex_time = mktime(timeinfo);
if (nex_time >= date && isInCron(nex_time)) {
setUtimestamp(nex_time);
setUtimestamp(nex_time, date);
return;
}
@ -298,7 +319,7 @@ void Cron::update (time_t date, int interval) {
// Check the day
if (isInCron(nex_time)){
setUtimestamp(nex_time);
setUtimestamp(nex_time, date);
return;
}
@ -308,7 +329,7 @@ void Cron::update (time_t date, int interval) {
// When an overflow is passed check the day update in the next execution
nex_time = mktime(timeinfo);
if (nex_time >= date && isInCron(nex_time)) {
setUtimestamp(nex_time);
setUtimestamp(nex_time, date);
return;
}
@ -324,7 +345,7 @@ void Cron::update (time_t date, int interval) {
// Check the month
if (isInCron(nex_time)) {
setUtimestamp(nex_time);
setUtimestamp(nex_time, date);
return;
}
@ -334,7 +355,7 @@ void Cron::update (time_t date, int interval) {
// When an overflow is passed check the month update in the next execution
nex_time = mktime(timeinfo);
if (nex_time >= date) {
setUtimestamp(nex_time);
setUtimestamp(nex_time, date);
return;
}
@ -342,5 +363,5 @@ void Cron::update (time_t date, int interval) {
timeinfo->tm_year++;
nex_time = mktime(timeinfo);
setUtimestamp(nex_time);
setUtimestamp(nex_time, date);
}

View File

@ -51,9 +51,10 @@ class Cron {
int params[5][2];
bool isSet;
string cronString;
time_t cronInterval;
// Methods
void setUtimestamp(time_t date);
void setUtimestamp(time_t date, time_t now);
bool isInCron(time_t date);
bool isWildCard(int position);
bool isSingleValue(int position);
@ -66,7 +67,7 @@ class Cron {
// Getter & setters
bool getIsSet();
string getCronString();
time_t getNextExecution();
string getCronIntervalStr();
// Other methods
void update(time_t date, int interval);

View File

@ -740,10 +740,14 @@ Pandora_Module::getXml () {
}
/* Module Crontab */
if (this->module_crontab != "") {
if (this->cron->getIsSet()) {
module_xml += "\t<crontab>";
module_xml += this->module_crontab;
module_xml += this->cron->getCronString();
module_xml += "</crontab>\n";
module_xml += "\t<cron_interval><![CDATA[";
module_xml += this->cron->getCronIntervalStr();
module_xml += "]]></cron_interval>\n";
}
/* Write module data */
@ -1563,7 +1567,7 @@ Pandora_Module::evaluateIntensiveConditions () {
/**
* Checks the module cron. Returns 1 if the module should run, 0 if not.
*
* @return true if the module should run.
* @return 1 if the module should run, 0 if not.
*/
bool
Pandora_Module::checkCron (int interval) {