add MessageMap::findAll changedSince argument to distinguish touched/changed for since/until range
This commit is contained in:
@@ -1197,7 +1197,7 @@ result_t BusHandler::prepareScan(symbol_t slave, bool full, const string& levels
|
|||||||
return RESULT_OK;
|
return RESULT_OK;
|
||||||
}
|
}
|
||||||
deque<Message*> messages;
|
deque<Message*> messages;
|
||||||
m_messages->findAll("scan", "", levels, true, true, false, false, true, true, 0, 0, &messages);
|
m_messages->findAll("scan", "", levels, true, true, false, false, true, true, 0, 0, false, &messages);
|
||||||
auto it = messages.begin();
|
auto it = messages.begin();
|
||||||
while (it != messages.end()) {
|
while (it != messages.end()) {
|
||||||
Message* message = *it;
|
Message* message = *it;
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ class DataSink : virtual public DataHandler {
|
|||||||
bool isDataSink() const override { return true; }
|
bool isDataSink() const override { return true; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify the sink of an updated @a Message.
|
* Notify the sink of an updated @a Message (not necessarily changed though).
|
||||||
* @param message the updated @a Message.
|
* @param message the updated @a Message.
|
||||||
*/
|
*/
|
||||||
virtual void notifyUpdate(Message* message);
|
virtual void notifyUpdate(Message* message);
|
||||||
|
|||||||
@@ -359,7 +359,7 @@ void MainLoop::run() {
|
|||||||
time(&now);
|
time(&now);
|
||||||
if (!dataSinks.empty()) {
|
if (!dataSinks.empty()) {
|
||||||
messages.clear();
|
messages.clear();
|
||||||
m_messages->findAll("", "", "*", false, true, true, true, true, true, sinkSince, now, &messages);
|
m_messages->findAll("", "", "*", false, true, true, true, true, true, sinkSince, now, false, &messages);
|
||||||
for (const auto message : messages) {
|
for (const auto message : messages) {
|
||||||
for (const auto dataSink : dataSinks) {
|
for (const auto dataSink : dataSinks) {
|
||||||
dataSink->notifyUpdate(message);
|
dataSink->notifyUpdate(message);
|
||||||
@@ -403,7 +403,7 @@ void MainLoop::run() {
|
|||||||
if (listening) {
|
if (listening) {
|
||||||
string levels = getUserLevels(user);
|
string levels = getUserLevels(user);
|
||||||
messages.clear();
|
messages.clear();
|
||||||
m_messages->findAll("", "", levels, false, true, true, true, true, true, since, now, &messages);
|
m_messages->findAll("", "", levels, false, true, true, true, true, true, since, now, true, &messages);
|
||||||
for (const auto message : messages) {
|
for (const auto message : messages) {
|
||||||
ostream << message->getCircuit() << " " << message->getName() << " = " << dec;
|
ostream << message->getCircuit() << " " << message->getName() << " = " << dec;
|
||||||
message->decodeLastData(false, nullptr, -1, 0, &ostream);
|
message->decodeLastData(false, nullptr, -1, 0, &ostream);
|
||||||
@@ -867,7 +867,7 @@ result_t MainLoop::executeRead(const vector<string>& args, const string& levels,
|
|||||||
return RESULT_OK;
|
return RESULT_OK;
|
||||||
}
|
}
|
||||||
deque<Message*> messages;
|
deque<Message*> messages;
|
||||||
m_newlyDefinedMessages->findAll("", "", levels, false, true, false, false, true, false, 0, 0, &messages);
|
m_newlyDefinedMessages->findAll("", "", levels, false, true, false, false, true, false, 0, 0, false, &messages);
|
||||||
if (messages.empty()) {
|
if (messages.empty()) {
|
||||||
*ostream << "ERR: bad definition: no read message";
|
*ostream << "ERR: bad definition: no read message";
|
||||||
return RESULT_OK;
|
return RESULT_OK;
|
||||||
@@ -1082,7 +1082,7 @@ result_t MainLoop::executeWrite(const vector<string>& args, const string levels,
|
|||||||
return RESULT_OK;
|
return RESULT_OK;
|
||||||
}
|
}
|
||||||
deque<Message*> messages;
|
deque<Message*> messages;
|
||||||
m_newlyDefinedMessages->findAll("", "", levels, false, false, true, false, true, false, 0, 0, &messages);
|
m_newlyDefinedMessages->findAll("", "", levels, false, false, true, false, true, false, 0, 0, false, &messages);
|
||||||
if (messages.empty()) {
|
if (messages.empty()) {
|
||||||
*ostream << "ERR: bad definition: no write message";
|
*ostream << "ERR: bad definition: no write message";
|
||||||
return RESULT_OK;
|
return RESULT_OK;
|
||||||
@@ -1325,7 +1325,7 @@ result_t MainLoop::executeFind(const vector<string>& args, const string& levels,
|
|||||||
}
|
}
|
||||||
deque<Message*> messages;
|
deque<Message*> messages;
|
||||||
m_messages->findAll(circuit, args.size() == argPos ? "" : args[argPos], useLevels,
|
m_messages->findAll(circuit, args.size() == argPos ? "" : args[argPos], useLevels,
|
||||||
exact, withRead, withWrite, withPassive, userLevel, !withConditions, 0, 0, &messages);
|
exact, withRead, withWrite, withPassive, userLevel, !withConditions, 0, 0, false, &messages);
|
||||||
|
|
||||||
bool found = false;
|
bool found = false;
|
||||||
char str[32];
|
char str[32];
|
||||||
@@ -1910,8 +1910,8 @@ result_t MainLoop::executeGet(const vector<string>& args, bool* connected, ostri
|
|||||||
verbosity |= (valueName ? OF_VALUENAME : numeric ? OF_NUMERIC : 0) | OF_JSON | (full ? OF_ALL_ATTRS : 0)
|
verbosity |= (valueName ? OF_VALUENAME : numeric ? OF_NUMERIC : 0) | OF_JSON | (full ? OF_ALL_ATTRS : 0)
|
||||||
| (withDefinition ? OF_DEFINTION : 0);
|
| (withDefinition ? OF_DEFINTION : 0);
|
||||||
deque<Message*> messages;
|
deque<Message*> messages;
|
||||||
m_messages->findAll(circuit, name, getUserLevels(user), exact, true, withWrite, true, true, true, 0, 0,
|
m_messages->findAll(circuit, name, getUserLevels(user), exact, true, withWrite, true, true, true, 0, 0, false,
|
||||||
&messages);
|
&messages);
|
||||||
string lastName;
|
string lastName;
|
||||||
for (deque<Message*>::iterator it = messages.begin(); it != messages.end(); it++) {
|
for (deque<Message*>::iterator it = messages.begin(); it != messages.end(); it++) {
|
||||||
Message* message = *it;
|
Message* message = *it;
|
||||||
|
|||||||
@@ -2506,7 +2506,7 @@ Message* MessageMap::find(const string& circuit, const string& name, const strin
|
|||||||
|
|
||||||
void MessageMap::findAll(const string& circuit, const string& name, const string& levels,
|
void MessageMap::findAll(const string& circuit, const string& name, const string& levels,
|
||||||
bool completeMatch, bool withRead, bool withWrite, bool withPassive, bool includeEmptyLevel, bool onlyAvailable,
|
bool completeMatch, bool withRead, bool withWrite, bool withPassive, bool includeEmptyLevel, bool onlyAvailable,
|
||||||
time_t since, time_t until, deque<Message*>* messages) const {
|
time_t since, time_t until, bool changedSince, deque<Message*>* messages) const {
|
||||||
string lcircuit = circuit;
|
string lcircuit = circuit;
|
||||||
FileReader::tolower(&lcircuit);
|
FileReader::tolower(&lcircuit);
|
||||||
string lname = name;
|
string lname = name;
|
||||||
@@ -2553,7 +2553,7 @@ void MessageMap::findAll(const string& circuit, const string& name, const string
|
|||||||
if (message->getDstAddress() == SYN) {
|
if (message->getDstAddress() == SYN) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
time_t lastchg = message->getLastChangeTime();
|
time_t lastchg = changedSince ? message->getLastChangeTime() : message->getLastUpdateTime();
|
||||||
if ((since != 0 && lastchg < since)
|
if ((since != 0 && lastchg < since)
|
||||||
|| (until != 0 && lastchg >= until)) {
|
|| (until != 0 && lastchg >= until)) {
|
||||||
continue;
|
continue;
|
||||||
@@ -2647,7 +2647,7 @@ void MessageMap::invalidateCache(Message* message) {
|
|||||||
string circuit = message->getCircuit();
|
string circuit = message->getCircuit();
|
||||||
string name = message->getName();
|
string name = message->getName();
|
||||||
deque<Message*> messages;
|
deque<Message*> messages;
|
||||||
findAll(circuit, name, "*", true, true, true, true, true, true, 0, 0, &messages);
|
findAll(circuit, name, "*", true, true, true, true, true, true, 0, 0, false, &messages);
|
||||||
for (auto checkMessage : messages) {
|
for (auto checkMessage : messages) {
|
||||||
if (checkMessage != message) {
|
if (checkMessage != message) {
|
||||||
checkMessage->m_lastUpdateTime = 0;
|
checkMessage->m_lastUpdateTime = 0;
|
||||||
|
|||||||
@@ -1403,11 +1403,12 @@ class MessageMap : public MappedFileReader {
|
|||||||
* address), or 0 to ignore.
|
* address), or 0 to ignore.
|
||||||
* @param until the end time to which to add updates (exclusive, also removes messages with unset destination
|
* @param until the end time to which to add updates (exclusive, also removes messages with unset destination
|
||||||
* address), or 0 to ignore.
|
* address), or 0 to ignore.
|
||||||
|
* @changedSince true to use the last change time for the since/until range, false to use the last seen time.
|
||||||
* @param messages the @a deque to which to add the found @a Message instances.
|
* @param messages the @a deque to which to add the found @a Message instances.
|
||||||
*/
|
*/
|
||||||
void findAll(const string& circuit, const string& name, const string& levels,
|
void findAll(const string& circuit, const string& name, const string& levels,
|
||||||
bool completeMatch, bool withRead, bool withWrite, bool withPassive, bool includeEmptyLevel, bool onlyAvailable,
|
bool completeMatch, bool withRead, bool withWrite, bool withPassive, bool includeEmptyLevel, bool onlyAvailable,
|
||||||
time_t since, time_t until, deque<Message*>* messages) const;
|
time_t since, time_t until, bool changedSince, deque<Message*>* messages) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the @a Message instance for the specified master data.
|
* Find the @a Message instance for the specified master data.
|
||||||
|
|||||||
@@ -367,7 +367,7 @@ int main() {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
deque<Message*> msgs;
|
deque<Message*> msgs;
|
||||||
messages->findAll("", "", "*", false, true, true, true, true, false, 0, 0, &msgs);
|
messages->findAll("", "", "*", false, true, true, true, true, false, 0, 0, false, &msgs);
|
||||||
if (msgs.empty()) {
|
if (msgs.empty()) {
|
||||||
message = nullptr;
|
message = nullptr;
|
||||||
cout << "\"" << check[0] << "\": create error: message not found" << endl;
|
cout << "\"" << check[0] << "\": create error: message not found" << endl;
|
||||||
|
|||||||
Reference in New Issue
Block a user