SimpleLogMatchingTracker.cpp revision caf339d004fad667748b68912c254df4e75cdc5a
1caf339d004fad667748b68912c254df4e75cdc5aYao Chen/* 2caf339d004fad667748b68912c254df4e75cdc5aYao Chen * Copyright (C) 2017 The Android Open Source Project 3caf339d004fad667748b68912c254df4e75cdc5aYao Chen * 4caf339d004fad667748b68912c254df4e75cdc5aYao Chen * Licensed under the Apache License, Version 2.0 (the "License"); 5caf339d004fad667748b68912c254df4e75cdc5aYao Chen * you may not use this file except in compliance with the License. 6caf339d004fad667748b68912c254df4e75cdc5aYao Chen * You may obtain a copy of the License at 7caf339d004fad667748b68912c254df4e75cdc5aYao Chen * 8caf339d004fad667748b68912c254df4e75cdc5aYao Chen * http://www.apache.org/licenses/LICENSE-2.0 9caf339d004fad667748b68912c254df4e75cdc5aYao Chen * 10caf339d004fad667748b68912c254df4e75cdc5aYao Chen * Unless required by applicable law or agreed to in writing, software 11caf339d004fad667748b68912c254df4e75cdc5aYao Chen * distributed under the License is distributed on an "AS IS" BASIS, 12caf339d004fad667748b68912c254df4e75cdc5aYao Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13caf339d004fad667748b68912c254df4e75cdc5aYao Chen * See the License for the specific language governing permissions and 14caf339d004fad667748b68912c254df4e75cdc5aYao Chen * limitations under the License. 15caf339d004fad667748b68912c254df4e75cdc5aYao Chen */ 16caf339d004fad667748b68912c254df4e75cdc5aYao Chen 17caf339d004fad667748b68912c254df4e75cdc5aYao Chen#define LOG_TAG "SimpleLogMatchingTracker" 18caf339d004fad667748b68912c254df4e75cdc5aYao Chen#define DEBUG true // STOPSHIP if true 19caf339d004fad667748b68912c254df4e75cdc5aYao Chen#define VLOG(...) \ 20caf339d004fad667748b68912c254df4e75cdc5aYao Chen if (DEBUG) ALOGD(__VA_ARGS__); 21caf339d004fad667748b68912c254df4e75cdc5aYao Chen 22caf339d004fad667748b68912c254df4e75cdc5aYao Chen#include "SimpleLogMatchingTracker.h" 23caf339d004fad667748b68912c254df4e75cdc5aYao Chen#include <cutils/log.h> 24caf339d004fad667748b68912c254df4e75cdc5aYao Chen#include <log/logprint.h> 25caf339d004fad667748b68912c254df4e75cdc5aYao Chen 26caf339d004fad667748b68912c254df4e75cdc5aYao Chenusing std::string; 27caf339d004fad667748b68912c254df4e75cdc5aYao Chenusing std::unique_ptr; 28caf339d004fad667748b68912c254df4e75cdc5aYao Chenusing std::unordered_map; 29caf339d004fad667748b68912c254df4e75cdc5aYao Chenusing std::vector; 30caf339d004fad667748b68912c254df4e75cdc5aYao Chen 31caf339d004fad667748b68912c254df4e75cdc5aYao Chennamespace android { 32caf339d004fad667748b68912c254df4e75cdc5aYao Chennamespace os { 33caf339d004fad667748b68912c254df4e75cdc5aYao Chennamespace statsd { 34caf339d004fad667748b68912c254df4e75cdc5aYao Chen 35caf339d004fad667748b68912c254df4e75cdc5aYao ChenSimpleLogMatchingTracker::SimpleLogMatchingTracker(const string& name, const int index, 36caf339d004fad667748b68912c254df4e75cdc5aYao Chen const SimpleLogEntryMatcher& matcher) 37caf339d004fad667748b68912c254df4e75cdc5aYao Chen : LogMatchingTracker(name, index), mMatcher(matcher) { 38caf339d004fad667748b68912c254df4e75cdc5aYao Chen for (int i = 0; i < matcher.tag_size(); i++) { 39caf339d004fad667748b68912c254df4e75cdc5aYao Chen mTagIds.insert(matcher.tag(i)); 40caf339d004fad667748b68912c254df4e75cdc5aYao Chen } 41caf339d004fad667748b68912c254df4e75cdc5aYao Chen mInitialized = true; 42caf339d004fad667748b68912c254df4e75cdc5aYao Chen} 43caf339d004fad667748b68912c254df4e75cdc5aYao Chen 44caf339d004fad667748b68912c254df4e75cdc5aYao ChenSimpleLogMatchingTracker::~SimpleLogMatchingTracker() { 45caf339d004fad667748b68912c254df4e75cdc5aYao Chen} 46caf339d004fad667748b68912c254df4e75cdc5aYao Chen 47caf339d004fad667748b68912c254df4e75cdc5aYao Chenbool SimpleLogMatchingTracker::init(const vector<LogEntryMatcher>& allLogMatchers, 48caf339d004fad667748b68912c254df4e75cdc5aYao Chen const vector<sp<LogMatchingTracker>>& allTrackers, 49caf339d004fad667748b68912c254df4e75cdc5aYao Chen const unordered_map<string, int>& matcherMap, 50caf339d004fad667748b68912c254df4e75cdc5aYao Chen vector<bool>& stack) { 51caf339d004fad667748b68912c254df4e75cdc5aYao Chen // no need to do anything. 52caf339d004fad667748b68912c254df4e75cdc5aYao Chen return true; 53caf339d004fad667748b68912c254df4e75cdc5aYao Chen} 54caf339d004fad667748b68912c254df4e75cdc5aYao Chen 55caf339d004fad667748b68912c254df4e75cdc5aYao Chenvoid SimpleLogMatchingTracker::onLogEvent(const LogEventWrapper& event, 56caf339d004fad667748b68912c254df4e75cdc5aYao Chen const vector<sp<LogMatchingTracker>>& allTrackers, 57caf339d004fad667748b68912c254df4e75cdc5aYao Chen vector<MatchingState>& matcherResults) { 58caf339d004fad667748b68912c254df4e75cdc5aYao Chen if (matcherResults[mIndex] != MatchingState::kNotComputed) { 59caf339d004fad667748b68912c254df4e75cdc5aYao Chen VLOG("Matcher %s already evaluated ", mName.c_str()); 60caf339d004fad667748b68912c254df4e75cdc5aYao Chen return; 61caf339d004fad667748b68912c254df4e75cdc5aYao Chen } 62caf339d004fad667748b68912c254df4e75cdc5aYao Chen 63caf339d004fad667748b68912c254df4e75cdc5aYao Chen if (mTagIds.find(event.tagId) == mTagIds.end()) { 64caf339d004fad667748b68912c254df4e75cdc5aYao Chen matcherResults[mIndex] = MatchingState::kNotMatched; 65caf339d004fad667748b68912c254df4e75cdc5aYao Chen return; 66caf339d004fad667748b68912c254df4e75cdc5aYao Chen } 67caf339d004fad667748b68912c254df4e75cdc5aYao Chen 68caf339d004fad667748b68912c254df4e75cdc5aYao Chen bool matched = matchesSimple(mMatcher, event); 69caf339d004fad667748b68912c254df4e75cdc5aYao Chen matcherResults[mIndex] = matched ? MatchingState::kMatched : MatchingState::kNotMatched; 70caf339d004fad667748b68912c254df4e75cdc5aYao Chen VLOG("Stats SimpleLogMatcher %s matched? %d", mName.c_str(), matched); 71caf339d004fad667748b68912c254df4e75cdc5aYao Chen} 72caf339d004fad667748b68912c254df4e75cdc5aYao Chen 73caf339d004fad667748b68912c254df4e75cdc5aYao Chen} // namespace statsd 74caf339d004fad667748b68912c254df4e75cdc5aYao Chen} // namespace os 75caf339d004fad667748b68912c254df4e75cdc5aYao Chen} // namespace android 76