blob: 60ed4de74bfbf9968d98c8f4713102f7fd19ce93 [file] [log] [blame]
/*
* Copyright (C) 2013 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 com.android.loganalysis.parser.KernelLogParser;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
/**
* A {@link IItem} used to store kernel log info.
*/
public class KernelLogItem extends GenericItem {
/** Constant for JSON output */
public static final String START_TIME = "START_TIME";
/** Constant for JSON output */
public static final String STOP_TIME = "STOP_TIME";
/** Constant for JSON output */
public static final String EVENTS = "EVENTS";
private static final Set<String> ATTRIBUTES = new HashSet<String>(Arrays.asList(
START_TIME, STOP_TIME, EVENTS));
@SuppressWarnings("serial")
private class ItemList extends LinkedList<MiscKernelLogItem> {}
/**
* The constructor for {@link KernelLogItem}.
*/
public KernelLogItem() {
super(ATTRIBUTES);
setAttribute(EVENTS, new ItemList());
}
/**
* Get the start time of the kernel log.
*/
public Double getStartTime() {
return (Double) getAttribute(START_TIME);
}
/**
* Set the start time of the kernel log.
*/
public void setStartTime(Double time) {
setAttribute(START_TIME, time);
}
/**
* Get the stop time of the kernel log.
*/
public Double getStopTime() {
return (Double) getAttribute(STOP_TIME);
}
/**
* Set the stop time of the kernel log.
*/
public void setStopTime(Double time) {
setAttribute(STOP_TIME, time);
}
/**
* Get the list of all {@link MiscKernelLogItem} events.
*/
public List<MiscKernelLogItem> getEvents() {
return (ItemList) getAttribute(EVENTS);
}
/**
* Add an {@link MiscKernelLogItem} event to the end of the list of events.
*/
public void addEvent(MiscKernelLogItem event) {
// Only take the first kernel reset
if (KernelLogParser.KERNEL_RESET.equals(event.getCategory()) &&
!getMiscEvents(KernelLogParser.KERNEL_RESET).isEmpty()) {
return;
}
((ItemList) getAttribute(EVENTS)).add(event);
}
/**
* Get the list of all {@link MiscKernelLogItem} events for a category.
*/
public List<MiscKernelLogItem> getMiscEvents(String category) {
List<MiscKernelLogItem> items = new LinkedList<MiscKernelLogItem>();
for (MiscKernelLogItem item : getEvents()) {
if (item.getCategory().equals(category)) {
items.add(item);
}
}
return items;
}
/**
* Get the list of all {@link SELinuxItem} events.
*/
public List<SELinuxItem> getSELinuxEvents() {
List<SELinuxItem> items = new LinkedList<SELinuxItem>();
for (MiscKernelLogItem item : getEvents()) {
if (item instanceof SELinuxItem) {
items.add((SELinuxItem)item);
}
}
return items;
}
/**
* {@inheritDoc}
*/
@Override
public JSONObject toJson() {
JSONObject output = super.toJson();
JSONArray events = new JSONArray();
for (MiscKernelLogItem event : getEvents()) {
events.put(event.toJson());
}
try {
output.put(EVENTS, events);
} catch (JSONException e) {
// Ignore
}
return output;
}
}