blob: 382d45cfdb1d47a4bb8abcb64024db0195c43a5e [file] [log] [blame]
// Copyright 2012 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Statistics for the Ticl, e.g., number of registration calls, number of token
// mismatches, etc.
#include "google/cacheinvalidation/impl/statistics.h"
namespace invalidation {
const char* Statistics::SentMessageType_names[] = {
"INFO",
"INITIALIZE",
"INVALIDATION_ACK",
"REGISTRATION",
"REGISTRATION_SYNC",
"TOTAL",
};
const char* Statistics::ReceivedMessageType_names[] = {
"INFO_REQUEST",
"INVALIDATION",
"REGISTRATION_STATUS",
"REGISTRATION_SYNC_REQUEST",
"TOKEN_CONTROL",
"ERROR",
"CONFIG_CHANGE",
"TOTAL",
};
const char* Statistics::IncomingOperationType_names[] = {
"ACKNOWLEDGE",
"REGISTRATION",
"UNREGISTRATION",
};
const char* Statistics::ListenerEventType_names[] = {
"INFORM_ERROR",
"INFORM_REGISTRATION_FAILURE",
"INFORM_REGISTRATION_STATUS",
"INVALIDATE",
"INVALIDATE_ALL",
"INVALIDATE_UNKNOWN",
"REISSUE_REGISTRATIONS",
};
const char* Statistics::ClientErrorType_names[] = {
"ACKNOWLEDGE_HANDLE_FAILURE",
"INCOMING_MESSAGE_FAILURE",
"OUTGOING_MESSAGE_FAILURE",
"PERSISTENT_DESERIALIZATION_FAILURE",
"PERSISTENT_READ_FAILURE",
"PERSISTENT_WRITE_FAILURE",
"PROTOCOL_VERSION_FAILURE",
"REGISTRATION_DISCREPANCY",
"NONCE_MISMATCH",
"TOKEN_MISMATCH",
"TOKEN_MISSING_FAILURE",
"TOKEN_TRANSIENT_FAILURE",
};
Statistics::Statistics() {
InitializeMap(sent_message_types_, SentMessageType_MAX + 1);
InitializeMap(received_message_types_, ReceivedMessageType_MAX + 1);
InitializeMap(incoming_operation_types_, IncomingOperationType_MAX + 1);
InitializeMap(listener_event_types_, ListenerEventType_MAX + 1);
InitializeMap(client_error_types_, ClientErrorType_MAX + 1);
}
void Statistics::GetNonZeroStatistics(
vector<pair<string, int> >* performance_counters) {
// Add the non-zero values from the different maps to performance_counters.
FillWithNonZeroStatistics(
sent_message_types_, SentMessageType_MAX + 1, SentMessageType_names,
"SentMessageType.", performance_counters);
FillWithNonZeroStatistics(
received_message_types_, ReceivedMessageType_MAX + 1,
ReceivedMessageType_names, "ReceivedMessageType.",
performance_counters);
FillWithNonZeroStatistics(
incoming_operation_types_, IncomingOperationType_MAX + 1,
IncomingOperationType_names, "IncomingOperationType.",
performance_counters);
FillWithNonZeroStatistics(
listener_event_types_, ListenerEventType_MAX + 1, ListenerEventType_names,
"ListenerEventType.", performance_counters);
FillWithNonZeroStatistics(
client_error_types_, ClientErrorType_MAX + 1, ClientErrorType_names,
"ClientErrorType.", performance_counters);
}
/* Modifies result to contain those statistics from map whose value is > 0. */
void Statistics::FillWithNonZeroStatistics(
int map[], int size, const char* names[], const char* prefix,
vector<pair<string, int> >* destination) {
for (int i = 0; i < size; ++i) {
if (map[i] > 0) {
destination->push_back(
make_pair(StringPrintf("%s%s", prefix, names[i]), map[i]));
}
}
}
void Statistics::InitializeMap(int map[], int size) {
for (int i = 0; i < size; ++i) {
map[i] = 0;
}
}
} // namespace invalidation