/* * Copyright 2016 the original author or authors. * @https://github.com/scouter-project/scouter * * 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 scouter.agent.batch.trace; public class TraceSQL { public static final String CURRENT_TRACESQL_FIELD = "_current_trace_sql_"; public Integer hashValue; public int runs = 0; public long startTime = -1L; public long endTime = 0L; public long totalTime = 0L; public long minTime = Long.MAX_VALUE; public long maxTime = 0L; public long processedRows = 0L; public boolean rowed = false; public long sqlStartTime; public void start(){ if(startTime == -1L){ startTime = System.currentTimeMillis(); } sqlStartTime = System.nanoTime(); } public void end(){ long responseTime = System.nanoTime() - sqlStartTime; runs++; totalTime += responseTime; if(minTime > responseTime){ minTime = responseTime; } if(maxTime < responseTime){ maxTime = responseTime; } endTime = System.currentTimeMillis(); } public void addRow(){ if(!rowed) rowed = true; processedRows++; } public void addRow(int rows){ if(!rowed) rowed = true; if(rows > 0){ processedRows += rows; } } public void addRows(int [] rows){ if(rows == null || rows.length < 1) return; if(!rowed) rowed = true; for(int i = 0; i < rows.length; i++){ if(rows[i] > 0){ processedRows += rows[i]; }else if(rows[i] == -2){ processedRows++; } } } public long getTotalTimeByMillis(){ return totalTime / 1000000L; } public long getTotalTimeByMicro(){ return totalTime / 1000L; } public long getMinTimeByMillis(){ return minTime / 1000000L; } public long getMinTimeByMicro(){ return minTime / 1000L; } public long getMaxTimeByMillis(){ return maxTime / 1000000L; } public long getMaxTimeByMicro(){ return maxTime / 1000L; } }