diff options
author | Shankhoneer Chakrovarty <shankh@google.com> | 2017-03-06 21:41:04 -0800 |
---|---|---|
committer | Shankhoneer Chakrovarty <shankh@google.com> | 2017-03-13 15:24:57 -0700 |
commit | 0b358bd8fc75e1f73d5e3eaf6e146c4f8b394955 (patch) | |
tree | e2b84b96c3b349ae631de5a73c41b5491e83060b /src | |
parent | b0d7b896a1b92d9eea0c3c660b67960adb5573f2 (diff) | |
download | loganalysis-0b358bd8fc75e1f73d5e3eaf6e146c4f8b394955.tar.gz |
Modified DmesgParser to return IItem
BUG:35758559
Change-Id: I55d960ac278d32159aa5c73932a1da3fbff25790
Fixes:35758559
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/loganalysis/item/DmesgItem.java | 83 | ||||
-rw-r--r-- | src/com/android/loganalysis/parser/DmesgParser.java | 76 |
2 files changed, 133 insertions, 26 deletions
diff --git a/src/com/android/loganalysis/item/DmesgItem.java b/src/com/android/loganalysis/item/DmesgItem.java new file mode 100644 index 0000000..de70145 --- /dev/null +++ b/src/com/android/loganalysis/item/DmesgItem.java @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * 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. + */ + +package com.android.loganalysis.item; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * An {@link IItem} used to store different infos logged in dmesg. + */ +public class DmesgItem extends GenericItem { + + private Map<String, DmesgServiceInfoItem> mServiceInfoItems = new HashMap<>(); + + private List<DmesgStageInfoItem> mStageInfoItems = new ArrayList<>(); + + private List<DmesgActionInfoItem> mActionInfoItems = new ArrayList<>(); + + public DmesgItem() { + super(Collections.emptySet()); + } + + /** + * @return the serviceInfoItems + */ + public Map<String, DmesgServiceInfoItem> getServiceInfoItems() { + return mServiceInfoItems; + } + + /** + * @param key to identify service info item + * @param serviceInfoItem to add + */ + public void addServiceInfoItem(String key, DmesgServiceInfoItem serviceInfoItem) { + mServiceInfoItems.put(key, serviceInfoItem); + } + + /** + * @return stageInfoItems + */ + public List<DmesgStageInfoItem> getStageInfoItems() { + return mStageInfoItems; + } + + /** + * @param stageInfoItem to be added to the list + */ + public void addStageInfoItem(DmesgStageInfoItem stageInfoItem) { + mStageInfoItems.add(stageInfoItem); + } + + /** + * @return actionInfoItems + */ + public List<DmesgActionInfoItem> getActionInfoItems() { + return mActionInfoItems; + } + + /** + * @param actionInfoItem to be added to the list + */ + public void addActionInfoItem(DmesgActionInfoItem actionInfoItem) { + mActionInfoItems.add(actionInfoItem); + } + +} diff --git a/src/com/android/loganalysis/parser/DmesgParser.java b/src/com/android/loganalysis/parser/DmesgParser.java index 9cb11cd..ba802cf 100644 --- a/src/com/android/loganalysis/parser/DmesgParser.java +++ b/src/com/android/loganalysis/parser/DmesgParser.java @@ -17,16 +17,14 @@ package com.android.loganalysis.parser; import com.android.loganalysis.item.DmesgActionInfoItem; +import com.android.loganalysis.item.DmesgItem; import com.android.loganalysis.item.DmesgServiceInfoItem; import com.android.loganalysis.item.DmesgStageInfoItem; -import com.android.loganalysis.item.IItem; import com.google.common.annotations.VisibleForTesting; import java.io.BufferedReader; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; @@ -76,15 +74,19 @@ public class DmesgParser implements IParser { private static final Pattern START_PROCESSING_ACTION = Pattern.compile( String.format("%s%s", SERVICE_PREFIX, START_PROCESSING_ACTION_PREFIX)); - private Map<String, DmesgServiceInfoItem> mServiceInfoItems = - new HashMap<String, DmesgServiceInfoItem>(); - private List<DmesgStageInfoItem> mStageInfoItems = new ArrayList<>(); - private List<DmesgActionInfoItem> mActionInfoItems = new ArrayList<>(); + private DmesgItem mDmesgItem = new DmesgItem(); + + /** + * {@inheritDoc} + */ @Override - public IItem parse(List<String> lines) { - throw new UnsupportedOperationException("Method has not been implemented in lieu" - + " of others"); + public DmesgItem parse(List<String> lines) { + for (String line : lines) { + parse(line); + } + + return mDmesgItem; } /** @@ -96,18 +98,38 @@ public class DmesgParser implements IParser { * @param input dmesg log * @throws IOException */ - public void parseInfo(BufferedReader bufferedLog) throws IOException { + public DmesgItem parseInfo(BufferedReader bufferedLog) throws IOException { String line; while ((line = bufferedLog.readLine()) != null) { - if (parseServiceInfo(line)) { - continue; - } - if (parseStageInfo(line)) { - continue; - } - if (parseActionInfo(line)) { - continue; - } + parse(line); + } + + return mDmesgItem; + } + + /** + * <p> + * Parse single line of the dmesg log to retrieve the duration of the service calls or start + * times of different boot stages or start times of actions taken based on the info contained in + * the line. + * </p> + * <p> + * Besides, while parsing these informations are stored in the intermediate + * {@link DmesgServiceInfoItem}, {@link DmesgStageInfoItem} and {@link DmesgActionInfoItem} + * objects + * </p> + * + * @param line individual line of the dmesg log + */ + private void parse(String line) { + if (parseServiceInfo(line)) { + return; + } + if (parseStageInfo(line)) { + return; + } + if (parseActionInfo(line)) { + return; } } @@ -158,7 +180,7 @@ public class DmesgParser implements IParser { stageInfoItem.setStageName(match.group(STAGE)); stageInfoItem.setStartTime((long) (Double.parseDouble( match.group(TIMESTAMP)) * 1000)); - mStageInfoItems.add(stageInfoItem); + mDmesgItem.addStageInfoItem(stageInfoItem); return true; } return false; @@ -180,7 +202,7 @@ public class DmesgParser implements IParser { actionInfoItem.setActionName(match.group(ACTION)); actionInfoItem.setStartTime((long) (Double.parseDouble( match.group(TIMESTAMP)) * 1000)); - mActionInfoItems.add(actionInfoItem); + mDmesgItem.addActionInfoItem(actionInfoItem); return true; } return false; @@ -198,19 +220,21 @@ public class DmesgParser implements IParser { } public Map<String, DmesgServiceInfoItem> getServiceInfoItems() { - return mServiceInfoItems; + return mDmesgItem.getServiceInfoItems(); } public void setServiceInfoItems(Map<String, DmesgServiceInfoItem> serviceInfoItems) { - this.mServiceInfoItems = serviceInfoItems; + for(String key : serviceInfoItems.keySet()) { + mDmesgItem.addServiceInfoItem(key, serviceInfoItems.get(key)); + } } public List<DmesgStageInfoItem> getStageInfoItems() { - return mStageInfoItems; + return mDmesgItem.getStageInfoItems(); } public List<DmesgActionInfoItem> getActionInfoItems() { - return mActionInfoItems; + return mDmesgItem.getActionInfoItems(); } } |