FileSelectedData selectedData = fileDataManager.getSelectedData();
ResultSet rs = fileDataManager.getApiDB().selectAPI(
- selectedData.getFilePath(), selectedData.getPid(),
- selectedData.getTid(), selectedData.isParentChart());
+ selectedData.getFileId(),
+ selectedData.getPid(),
+ selectedData.getTid(),
+ selectedData.isParentChart());
if (rs != null) {
try {
int i = -1;
+ int index = 0;
while (rs.next()) {
i++;
+ index++;
List<String> contentText = new ArrayList<String>();
List<String> contentData = new ArrayList<String>();
String apiName = Global.getFunctionName(apiId);
long startTime = 0;
- contentText.add(0, Integer.toString(seq));
- contentData.add(Integer.toString(seq));
-
boolean isExistStartTimeLog = false;
if (fdApiType == LogCenterConstants.FD_API_TYPE_READ_START
|| fdApiType == LogCenterConstants.FD_API_TYPE_WRITE_START
String keString = apiName + pid + tid + fd;
findStartAPITableIndexHashMap.put(keString, i);
findStartTimeHashMap.put(i, time);
+ index--;
} else if (fdApiType == LogCenterConstants.FD_API_TYPE_READ_END
|| fdApiType == LogCenterConstants.FD_API_TYPE_WRITE_END
|| fdApiType == LogCenterConstants.FD_API_TYPE_LOCK_END) {
contentData.add("00.000");//$NON-NLS-1$
}
+ contentText.add(0, Integer.toString(index));
+ contentData.add(0, Integer.toString(index));
+
contentText.add(Integer.toString(pid));
contentData.add(Integer.toString(pid));
contentText.add(returns);
contentData.add(returns);
+
+ contentText.add(Integer.toString(seq));
+ contentData.add(Integer.toString(seq));
String errMsg = ErrorCodeManager.getInatance()
.getErrorCode(errno).name();
// if new event is put from swap, update table
ResultSet rs = manager.getApiDB().selectAPI(
- selectedData.getFilePath(), selectedData.getPid(),
+ selectedData.getFileId(),
+ selectedData.getPid(),
selectedData.getTid(),
selectedData.isParentChart());
import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
import org.tizen.dynamicanalyzer.nl.FilePageLabels;
import org.tizen.dynamicanalyzer.resources.ColorResources;
-import org.tizen.dynamicanalyzer.ui.file.data.FileApiDB;
import org.tizen.dynamicanalyzer.ui.file.manager.FileDataManager;
import org.tizen.dynamicanalyzer.ui.file.model.FileAccess;
import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
private DAChartSeries accessSeries;
private String filePath = null;
+ private int fileId = -1;
private int pid = -1;
private int tid = -1;
private long fd = -1;
private FileDataManager fileChartManager = FileDataManager.getInstance();
- public FileChart(String filePath) {
+ public FileChart(String filePath, int fileId) {
this.filePath = filePath;
+ this.fileId = fileId;
}
public FileChart(String filePath, int pid, int tid, long fd) {
}
public FileChart(int pid, int tid, long fd, String filePath, long fileSize,
- boolean isTarget, int chartIndex) {
+ boolean isTarget, int chartIndex, int fileId) {
this.filePath = filePath;
this.pid = pid;
this.tid = tid;
this.fileSize = fileSize;
this.isTarget = isTarget;
this.chartIndex = chartIndex;
+ this.fileId = fileId;
}
public void setItem(DAChartBoardItem item) {
*/
public void updateApiSeries(double startTime, double endTime){
ResultSet rs = fileChartManager.getApiDB().selectFailedAPI(
- startTime, endTime, this.filePath, this.pid, this.tid);
+ startTime, endTime, this.fileId, this.pid, this.tid);
if (rs != null) {
try {
while (rs.next()) {
public void setChartIndex(int index) {
this.chartIndex = index;
}
+
+ public int getFileId() {
+ return fileId;
+ }
+
+ public void setFileId(int fileId) {
+ this.fileId = fileId;
+ }
}
\ No newline at end of file
FileChart parent = null;
FileChart child = null;
String filePath = null;
+ int fileId = 0;
List<FileEvent> eventList = dataMaker.getFileEventList();
if (eventList == null) {
}
for (FileEvent event : eventList) {
+ //TODO change fileId
filePath = event.getFilePath();
parent = getParentChart(filePath);
+ fileId = event.getFileId();
+
if (parent == null) {
parentChartIndex++;
- parent = new FileChart(filePath);
+ parent = new FileChart(filePath, fileId);
child = new FileChart(event.getPid(), event.getTid(),
event.getFdValue(), event.getFilePath(),
- event.getFileSize(), event.isTarget(), parentChartIndex);
+ event.getFileSize(), event.isTarget(), parentChartIndex, fileId);
parent.addChild(child);
parent.setChartIndex(parentChartIndex);
createChartItem(null, parent);
if (child == null) {
child = new FileChart(event.getPid(), event.getTid(),
event.getFdValue(), event.getFilePath(),
- event.getFileSize(), event.isTarget(), parent.getChartIndex());
+ event.getFileSize(), event.isTarget(), parent.getChartIndex(), fileId);
parent.addChild(child);
createChartItem(parent, child);
chartList.add(child);
item = new DAChartBoardItem(parentItem, title.toString());
chart = item.getChart();
item.setData(new FileSelectedData(fileChart.getFilePath(), fileChart.getPid(),
- fileChart.getTid(), fileChart.getFd(), false));
+ fileChart.getTid(), fileChart.getFd(), false, fileChart.getFileId()));
// disable non-target rows
if(!fileChart.isTarget()) {
item.setSelectable(false);
item = new DAChartBoardItem(this, title);
item.setData(new FileSelectedData(fileChart.getFilePath(),
fileChart.getPid(), fileChart.getTid(), fileChart.getFd(),
- fileChart.getFileSize(), true));
+ true, fileChart.getFileId()));
chart = item.getChart();
initFileChart(chart, true);
}
private void updateData(FileSelectedData selectData) {
failedApiCount = 0;
ResultSet rs = fileChartManager.getApiDB().selectAPI(
- selectData.getFilePath(), selectData.getPid(),
- selectData.getTid(), selectData.isParentChart());
+ selectData.getFileId(),
+ selectData.getPid(),
+ selectData.getTid(),
+ selectData.isParentChart());
if (rs != null) {
try {
SIZE(12, "SIZE"),
RETURN_VALUE(13, "RETURN_VALUE"),
ARGS(14, "ARGS"),
- TARGET(15, "TARGET");
+ TARGET(15, "TARGET"),
+ FILE_ID(16, "FILE_ID");
public final int index;
public final String name;
addColumn(new DBColumn(COLUMN.RETURN_VALUE.name, DBConstants.EMPTY, DBConstants.BIG_TEXT));
addColumn(new DBColumn(COLUMN.ARGS.name, DBConstants.EMPTY, DBConstants.BIG_TEXT));
addColumn(new DBColumn(COLUMN.TARGET.name, DBConstants.NOT_NULL, DBConstants.BOOLEAN));
+ addColumn(new DBColumn(COLUMN.FILE_ID.name, DBConstants.NOT_NULL, DBConstants.INTEGER));
}
private static final String selectAllColumn = selectAllColumn();
+ COLUMN.EVENT_TIME.name + " and "
+ COLUMN.EVENT_TIME.name
+ " <= %s" + " and "
- + COLUMN.FILE_PATH.name + " = '%s'" + " and "
+ //+ COLUMN.FILE_PATH.name + " = '%s'" + " and "
+ + COLUMN.FILE_ID.name + " = '%d'" + " and "
+ COLUMN.PID.name + " = '%d'" + " and "
+ COLUMN.TID.name + " = '%d'" + " and "
+ COLUMN.ERRNO.name + " != '0'" + " and "
+ selectAllColumn
+" from "
+ TABLE_NAME + " where "
- + COLUMN.FILE_PATH.name + " = '%s'" + " and "
+ + COLUMN.FILE_ID.name + " = '%d'" + " and "
+ COLUMN.PID.name + " = '%d'" + " and "
+ COLUMN.TID.name + " = '%d'" + " and "
+ COLUMN.TARGET.name + " = 'true'";
+ selectAllColumn
+ " from "
+ TABLE_NAME + " where "
- + COLUMN.FILE_PATH.name + " = '%s'" + " and "
+ + COLUMN.FILE_ID.name + " = '%d'" + " and "
+ COLUMN.TARGET.name + " = 'true'";
private static final String SELECT_FILE_EVENT_BY_SEQ = "select "
rs.getString(COLUMN.ARGS.index),
rs.getString(COLUMN.RETURN_VALUE.index),
rs.getLong(COLUMN.ERRNO.index),
- rs.getBoolean(COLUMN.TARGET.index)
+ rs.getBoolean(COLUMN.TARGET.index),
+ rs.getInt(COLUMN.FILE_ID.index)
);
} catch (SQLException e) {
e.printStackTrace();
// for updating api series chart
public ResultSet selectFailedAPI(double visibleStartTime,
- double visibleEndTime, String filePath, int pid, int tid) {
+ double visibleEndTime, int fileId, int pid, int tid) {
double selectStartTime = visibleStartTime
* TimelineConstants.MEGA_DOUBLE;
double selectEndTime = visibleEndTime * TimelineConstants.MEGA_DOUBLE;
String query = String.format(SELECT_FAILED_API_SERIES, selectStartTime,
- selectEndTime, filePath, pid, tid);
+ selectEndTime, fileId, pid, tid);
return SqlConnectionManager.executeQueryRS(query);
}
// for updating api table view and detail view
- public ResultSet selectAPI(String filePath, int pid, int tid,
+ public ResultSet selectAPI(int fileId, int pid, int tid,
boolean isParentChart) {
- String query = String.format(SELECT_APIS_FOR_CHILD, filePath, pid, tid);
+ String query = String.format(SELECT_APIS_FOR_CHILD, fileId, pid, tid);
if (isParentChart) {
- query = String.format(SELECT_APIS_FOR_PARENT, filePath);
+ query = String.format(SELECT_APIS_FOR_PARENT, fileId);
}
return SqlConnectionManager.executeQueryRS(query);
}
selectAllColumn.append(COLUMN.ARGS.name);
selectAllColumn.append(",");
selectAllColumn.append(COLUMN.TARGET.name);
+ selectAllColumn.append(",");
+ selectAllColumn.append(COLUMN.FILE_ID.name);
return selectAllColumn.toString();
}
prep.setString(13, (String)(rowData.get(12)));
prep.setString(14, (String)(rowData.get(13)));
prep.setBoolean(15, (Boolean)(rowData.get(14)));
+ prep.setInt(16, (Integer)(rowData.get(15)));
} catch (SQLException e) {
e.printStackTrace();
isPrepared = false;
private static final String TABLE_NAME = FilePageLabels.FILE_STATUS_DB;
public static enum COLUMN {
- PID(1, "PID"),
- TID(2, "TID"),
- FILE_PATH(3, "FILE_PATH"),
- FD(4, "FD"),
- API_TYPE(5, "API_TYPE"),
- EVENT_TIME(6, "EVENT_TIME"),
- ERRNO(7, "ERRNO");
+ FILE_PATH(1, "FILE_PATH"),
+ API_TYPE(2, "API_TYPE"),
+ EVENT_TIME(3, "EVENT_TIME"),
+ ERRNO(4, "ERRNO");
private final int index;
private final String name;
}
public FileStatusDB() {
- addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.INTEGER));
- addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.INTEGER));
addColumn(new DBColumn(COLUMN.FILE_PATH.name, DBConstants.NOT_NULL, DBConstants.BIG_TEXT));
- addColumn(new DBColumn(COLUMN.FD.name, DBConstants.EMPTY, DBConstants.LONG));
addColumn(new DBColumn(COLUMN.API_TYPE.name, DBConstants.NOT_NULL, DBConstants.INTEGER));
addColumn(new DBColumn(COLUMN.EVENT_TIME.name, DBConstants.NOT_NULL, DBConstants.LONG));
addColumn(new DBColumn(COLUMN.ERRNO.name, DBConstants.NOT_NULL, DBConstants.LONG));
FileStatus status = null;
try {
status = new FileStatus(
- rs.getInt(COLUMN.PID.index),
- rs.getInt(COLUMN.TID.index),
- rs.getLong(COLUMN.FD.index),
rs.getString(COLUMN.FILE_PATH.index),
rs.getInt(COLUMN.API_TYPE.index),
rs.getLong(COLUMN.EVENT_TIME.index),
public static String selectAll() {
StringBuffer selectAllColumn = new StringBuffer();
- selectAllColumn.append(COLUMN.PID.name);
- selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.TID.name);
- selectAllColumn.append(",");
selectAllColumn.append(COLUMN.FILE_PATH.name);
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.FD.name);
- selectAllColumn.append(",");
selectAllColumn.append(COLUMN.API_TYPE.name);
selectAllColumn.append(",");
selectAllColumn.append(COLUMN.EVENT_TIME.name);
isPrepared = false;
} else {
try {
- prep.setInt(1, (Integer)(rowData.get(0)));
+ prep.setString(1, (String)(rowData.get(0)));
prep.setInt(2, (Integer)(rowData.get(1)));
- prep.setString(3, (String)(rowData.get(2)));
+ prep.setLong(3, (Long)(rowData.get(2)));
prep.setLong(4, (Long)(rowData.get(3)));
- prep.setInt(5, (Integer)(rowData.get(4)));
- prep.setLong(6, (Long)(rowData.get(5)));
- prep.setLong(7, (Long)(rowData.get(6)));
} catch (SQLException e) {
e.printStackTrace();
isPrepared = false;
// for searching entry message from exit message
Map<Integer, FileEvent> entryMap = new HashMap<Integer, FileEvent>();
+ private Map<String, Integer> fileMap = new HashMap<String, Integer>();
+
public FileDataMaker() {}
public void clear(){
long size = event.getSize();
long errNo = event.getErrno();
+ int fileId = 0;
String key = null;
Logger.debug("pid:" + pid + " tid:" +tid + " apiType:" + apiType);
// set the file path to all normal file event that open and close was succeed
filePath = getFilePath(key);
event.setFilePath(filePath);
+ event.setFileId(getFileId(filePath));
+ }else{
+ fileId = getFileId(filePath);
+ event.setFileId(fileId);
}
}
if(isTarget && errNo == 0) {
addFileAccessor(key, filePath);
}
- addStatusData(new FileStatus(pid, tid, fd, filePath,
- apiType, eventTime, errNo));
+ addStatusData(new FileStatus(filePath, apiType, eventTime, errNo));
break;
case LogCenterConstants.FD_API_TYPE_CLOSE:
if(isTarget && errNo == 0) {
removeFileAccessor(key);
}
- addStatusData(new FileStatus(pid, tid, fd, filePath,
- apiType, eventTime, errNo));
+ addStatusData(new FileStatus(filePath, apiType, eventTime, errNo));
// if it remains lock without lock release
if(getCurrentLockNum(filePath) > 0) {
removeLockNum(filePath);
}
}
+ private int getFileId(String filePath) {
+ if(fileMap.containsKey(filePath)) {
+ return fileMap.get(filePath);
+ }else{
+ int size = fileMap.size()+1;
+ fileMap.put(filePath, size);
+ return size;
+ }
+ }
+
private void checkFileAnalysisLimit() {
if ( (fileAccessList.size() > DALimit.MAX_FILE_ACCESS_COUNT
|| fileStatusList.size() > DALimit.MAX_FILE_STATUS_COUNT)) {
import java.util.ArrayList;
import java.util.List;
-import org.tizen.dynamicanalyzer.ui.file.data.FileAccessDB;
public class FileAccess {
private String filePath = null;
private boolean isAlreadyLocking = false;
private boolean isWarning = false;
- public FileAccess(String filePath, int pid, int tid, int apiType, long startTime) {
- this.filePath = filePath;
- this.pid = pid;
- this.tid = tid;
- this.apiType = apiType;
- this.startTime = startTime;
- }
public FileAccess(String filePath, int pid, int tid, long fd, int apiType, long startTime) {
this.filePath = filePath;
private long ioSize =-1;
private boolean target = false;
private int lockType = -1;
+ protected int fileId = -1;
public FileEvent() { }
this.target = target;
}
+ public FileEvent(int seq, String filePath, int pid, int tid,
+ long fd, int apiType, int apiId, long eventTime, long fileSize, long size,
+ String args, String returnVal, long errNo, boolean target, int fileId){
+ this.seq = seq;
+ this.filePath = filePath;
+ this.pid = pid;
+ this.tid = tid;
+ this.fdValue = fd;
+ this.fdApiType = apiType;
+ this.apiId = apiId;
+ this.time = eventTime;
+ this.fileSize = fileSize;
+ this.size = size;
+ this.args = args;
+ this.ret = returnVal;
+ this.errno = errNo;
+ this.target = target;
+ this.fileId = fileId;
+ }
+
public FileEvent(int seq, String filePath, int pid, int tid) {
this.seq = seq;
this.filePath = filePath;
data.add(this.ret);
data.add(this.args);
data.add(this.target);
+ data.add(this.fileId);
return data;
}
public int getLockType() {
return lockType;
}
+
+ public void setFileId(int fileId) {
+ this.fileId = fileId;
+ }
+
+ public int getFileId() {
+ return fileId;
+ }
}
public class FileSelectedData extends FileEvent{
private boolean isParentChart = false;
- public FileSelectedData(String filePath, int pid, int tid,long fd, boolean isParentChart) {
+ public FileSelectedData(String filePath, int pid, int tid,long fd, boolean isParentChart, int fileId) {
this.filePath = filePath;
this.pid = pid;
this.tid = tid;
this.fdValue = fd;
this.isParentChart = isParentChart;
- }
-
- public FileSelectedData(String filePath, int pid, int tid, long fd,
- long fileSize, boolean isParentChart) {
- this.pid = pid;
- this.tid = tid;
- this.fdValue = fd;
- this.isParentChart = isParentChart;
- this.filePath = filePath;
- this.fileSize = fileSize;
- }
-
- public int getPid() {
- return pid;
- }
-
- public void setPid(int pid) {
- this.pid = pid;
- }
-
- public int getTid() {
- return tid;
- }
-
- public void setTid(int tid) {
- this.tid = tid;
+ this.fileId = fileId;
}
public boolean isParentChart() {
this.isParentChart = isParentChart;
}
- public String getFilePath(){
- return filePath;
- }
-
public String getFileName() {
String[] splitPath = this.filePath.split("\\/"); //$NON-NLS-1$
String fileName = new String(splitPath[splitPath.length - 1]);
return fileName;
}
- public long getFileSize() {
- return fileSize;
- }
-
- public void getFileSize(long fileSize) {
- this.fileSize = fileSize;
- }
-
}
import java.util.ArrayList;
import java.util.List;
-import org.tizen.dynamicanalyzer.ui.file.data.FileStatusDB;
-
public class FileStatus {
private String filePath = null;
- private int pid = -1;
- private int tid = -1;
- private long fd = -1;
private int apiType = -1; // only open, close event
private long eventTime = -1;
private long errNo = 0;
- public FileStatus(int pid, int tid, long fd, String filePath,
- int apiType, long eventTime, long errNo) {
+ public FileStatus(String filePath,int apiType, long eventTime, long errNo) {
this.filePath = filePath;
- this.pid = pid;
- this.tid = tid;
- this.fd = fd;
this.apiType = apiType;
this.eventTime = eventTime;
this.errNo = errNo;
public List<Object> getDBData() {
List<Object> data = new ArrayList<Object>();
- data.add(this.pid);
- data.add(this.tid);
data.add(this.filePath);
- data.add(this.fd);
data.add(this.apiType);
data.add(this.eventTime);
data.add(this.errNo);
this.filePath = filePath;
}
- public int getPid() {
- return pid;
- }
-
- public void setPid(int pid) {
- this.pid = pid;
- }
-
- public int getTid() {
- return tid;
- }
-
- public void setTid(int tid) {
- this.tid = tid;
- }
-
- public long getFd() {
- return fd;
- }
-
- public void setFd(long fd) {
- this.fd = fd;
- }
-
public int getApiType() {
return apiType;
}