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 17729093df0dd7d7038ad43b16ecdb59a1404f3b50Yao Chen#define DEBUG false // STOPSHIP if true 189fc9edf95a308f5884bf541cac81ce1f41aba0baJoe Onorato#include "Log.h" 19caf339d004fad667748b68912c254df4e75cdc5aYao Chen 20caf339d004fad667748b68912c254df4e75cdc5aYao Chen#include "SimpleLogMatchingTracker.h" 219fc9edf95a308f5884bf541cac81ce1f41aba0baJoe Onorato 229fc9edf95a308f5884bf541cac81ce1f41aba0baJoe Onoratonamespace android { 239fc9edf95a308f5884bf541cac81ce1f41aba0baJoe Onoratonamespace os { 249fc9edf95a308f5884bf541cac81ce1f41aba0baJoe Onoratonamespace statsd { 259fc9edf95a308f5884bf541cac81ce1f41aba0baJoe Onorato 26caf339d004fad667748b68912c254df4e75cdc5aYao Chenusing std::string; 27caf339d004fad667748b68912c254df4e75cdc5aYao Chenusing std::unique_ptr; 28caf339d004fad667748b68912c254df4e75cdc5aYao Chenusing std::unordered_map; 29caf339d004fad667748b68912c254df4e75cdc5aYao Chenusing std::vector; 30caf339d004fad667748b68912c254df4e75cdc5aYao Chen 31caf339d004fad667748b68912c254df4e75cdc5aYao Chen 3294e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-macSimpleLogMatchingTracker::SimpleLogMatchingTracker(const int64_t& id, const int index, 332087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const SimpleAtomMatcher& matcher, 342087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac const UidMap& uidMap) 3594e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac : LogMatchingTracker(id, index), mMatcher(matcher), mUidMap(uidMap) { 362087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac if (!matcher.has_atom_id()) { 37729093df0dd7d7038ad43b16ecdb59a1404f3b50Yao Chen mInitialized = false; 38729093df0dd7d7038ad43b16ecdb59a1404f3b50Yao Chen } else { 392087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac mAtomIds.insert(matcher.atom_id()); 40729093df0dd7d7038ad43b16ecdb59a1404f3b50Yao Chen mInitialized = true; 41caf339d004fad667748b68912c254df4e75cdc5aYao Chen } 42caf339d004fad667748b68912c254df4e75cdc5aYao Chen} 43caf339d004fad667748b68912c254df4e75cdc5aYao Chen 44caf339d004fad667748b68912c254df4e75cdc5aYao ChenSimpleLogMatchingTracker::~SimpleLogMatchingTracker() { 45caf339d004fad667748b68912c254df4e75cdc5aYao Chen} 46caf339d004fad667748b68912c254df4e75cdc5aYao Chen 47b8c9aa8c9ccba4e64759c177381b742ca99a5487Stefan Lafonbool SimpleLogMatchingTracker::init(const vector<AtomMatcher>& allLogMatchers, 48caf339d004fad667748b68912c254df4e75cdc5aYao Chen const vector<sp<LogMatchingTracker>>& allTrackers, 4994e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac const unordered_map<int64_t, int>& matcherMap, 50caf339d004fad667748b68912c254df4e75cdc5aYao Chen vector<bool>& stack) { 51caf339d004fad667748b68912c254df4e75cdc5aYao Chen // no need to do anything. 52729093df0dd7d7038ad43b16ecdb59a1404f3b50Yao Chen return mInitialized; 53caf339d004fad667748b68912c254df4e75cdc5aYao Chen} 54caf339d004fad667748b68912c254df4e75cdc5aYao Chen 55c4dfae56c10a1dd571baa78c750f2e68c919d74fJoe Onoratovoid SimpleLogMatchingTracker::onLogEvent(const LogEvent& event, 56caf339d004fad667748b68912c254df4e75cdc5aYao Chen const vector<sp<LogMatchingTracker>>& allTrackers, 57caf339d004fad667748b68912c254df4e75cdc5aYao Chen vector<MatchingState>& matcherResults) { 58caf339d004fad667748b68912c254df4e75cdc5aYao Chen if (matcherResults[mIndex] != MatchingState::kNotComputed) { 5994e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac VLOG("Matcher %lld already evaluated ", (long long)mId); 60caf339d004fad667748b68912c254df4e75cdc5aYao Chen return; 61caf339d004fad667748b68912c254df4e75cdc5aYao Chen } 62caf339d004fad667748b68912c254df4e75cdc5aYao Chen 632087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac if (mAtomIds.find(event.GetTagId()) == mAtomIds.end()) { 64caf339d004fad667748b68912c254df4e75cdc5aYao Chen matcherResults[mIndex] = MatchingState::kNotMatched; 65caf339d004fad667748b68912c254df4e75cdc5aYao Chen return; 66caf339d004fad667748b68912c254df4e75cdc5aYao Chen } 67caf339d004fad667748b68912c254df4e75cdc5aYao Chen 682087716f2bdca90c7c3034d556ac12911bd8018eYangster-mac bool matched = matchesSimple(mUidMap, mMatcher, event); 69caf339d004fad667748b68912c254df4e75cdc5aYao Chen matcherResults[mIndex] = matched ? MatchingState::kMatched : MatchingState::kNotMatched; 7094e197cceb2ba7df13ff8de04f60bfeec64015d9Yangster-mac VLOG("Stats SimpleLogMatcher %lld matched? %d", (long long)mId, matched); 71caf339d004fad667748b68912c254df4e75cdc5aYao Chen} 72caf339d004fad667748b68912c254df4e75cdc5aYao Chen 73caf339d004fad667748b68912c254df4e75cdc5aYao Chen} // namespace statsd 74caf339d004fad667748b68912c254df4e75cdc5aYao Chen} // namespace os 75caf339d004fad667748b68912c254df4e75cdc5aYao Chen} // namespace android 76