X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=datarouter-prov%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fdmaap%2Fdatarouter%2Freports%2FDailyLatencyReport.java;h=3b3b72a949a1e3d287f182d3b48e21544c2a9b95;hb=refs%2Fchanges%2F66%2F97366%2F2;hp=cd48e6238835a1e59d4673b90bf5fc86015ba1ed;hpb=e4b20cc6f7c31f48ddd0de5bcd054b09a35cd510;p=dmaap%2Fdatarouter.git diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/reports/DailyLatencyReport.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/reports/DailyLatencyReport.java index cd48e623..3b3b72a9 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/reports/DailyLatencyReport.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/reports/DailyLatencyReport.java @@ -7,9 +7,9 @@ * * 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. @@ -37,8 +37,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeSet; - -import org.onap.dmaap.datarouter.provisioning.utils.DB; +import org.onap.dmaap.datarouter.provisioning.utils.ProvDbUtils; /** * Generate a daily per feed latency report. The report is a .csv file containing the following columns: @@ -65,130 +64,136 @@ import org.onap.dmaap.datarouter.provisioning.utils.DB; * @version $Id: DailyLatencyReport.java,v 1.2 2013/11/06 16:23:54 eby Exp $ */ public class DailyLatencyReport extends ReportBase { - private static final String SELECT_SQL = - "select EVENT_TIME, TYPE, PUBLISH_ID, FEED_FILEID, FEEDID, CONTENT_LENGTH from LOG_RECORDS" + - " where EVENT_TIME >= ? and EVENT_TIME <= ?"; - private class Job { - public long pubtime = 0; - public long clen = 0; - public List deltime = new ArrayList(); - public long minLatency() { - long n = deltime.isEmpty() ? 0 : Long.MAX_VALUE; - for (Long l : deltime) - n = Math.min(n, l-pubtime); - return n; - } - public long maxLatency() { - long n = 0; - for (Long l : deltime) - n = Math.max(n, l-pubtime); - return n; - } - public long totalLatency() { - long n = 0; - for (Long l : deltime) - n += (l-pubtime); - return n; - } - } - private class Counters { - public final String date; - public final int feedid; - public final Map jobs; - public Counters(String d, int fid) { - date = d; - feedid = fid; - jobs = new HashMap(); - } - public void addEvent(long etime, String type, String id, String fid, long clen) { - Job j = jobs.get(id); - if (j == null) { - j = new Job(); - jobs.put(id, j); - } - if (type.equals("pub")) { - j.pubtime = getPstart(id); - j.clen = clen; - } else if (type.equals("del")) { - j.deltime.add(etime); - } - } - @Override - public String toString() { - long minsize = Long.MAX_VALUE, maxsize = 0, avgsize = 0; - long minl = Long.MAX_VALUE, maxl = 0; - long fanout = 0, totall = 0, totaln = 0; - for (Job j : jobs.values()) { - minsize = Math.min(minsize, j.clen); - maxsize = Math.max(maxsize, j.clen); - avgsize += j.clen; - minl = Math.min(minl, j.minLatency()); - maxl = Math.max(maxl, j.maxLatency()); - totall += j.totalLatency(); - totaln += j.deltime.size(); - fanout += j.deltime.size(); - } - if (jobs.size() > 0) { - avgsize /= jobs.size(); - fanout /= jobs.size(); - } - long avgl = (totaln > 0) ? (totall / totaln) : 0; - return date + "," + feedid + "," + minsize + "," + maxsize + "," + avgsize + "," + minl + "," + maxl + "," + avgl + "," + fanout; - } - } - private long getPstart(String t) { - if (t.indexOf('.') > 0) - t = t.substring(0, t.indexOf('.')); - return Long.parseLong(t); - } + private class Job { + private long pubtime = 0; + private long clen = 0; + private List deltime = new ArrayList<>(); + public long minLatency() { + long n = deltime.isEmpty() ? 0 : Long.MAX_VALUE; + for (Long l : deltime) { + n = Math.min(n, l - pubtime); + } + return n; + } + + public long maxLatency() { + long n = 0; + for (Long l : deltime) { + n = Math.max(n, l - pubtime); + } + return n; + } + + public long totalLatency() { + long n = 0; + for (Long l : deltime) { + n += (l - pubtime); + } + return n; + } + } + + private class Counters { + + public final String date; + public final int feedid; + public final Map jobs; + + public Counters(String d, int fid) { + date = d; + feedid = fid; + jobs = new HashMap<>(); + } + + public void addEvent(long etime, String type, String id, String fid, long clen) { + Job j = jobs.get(id); + if (j == null) { + j = new Job(); + jobs.put(id, j); + } + if (type.equals("pub")) { + j.pubtime = getPstart(id); + j.clen = clen; + } else if (type.equals("del")) { + j.deltime.add(etime); + } + } + + @Override + public String toString() { + long minsize = Long.MAX_VALUE, maxsize = 0, avgsize = 0; + long minl = Long.MAX_VALUE, maxl = 0; + long fanout = 0, totall = 0, totaln = 0; + for (Job j : jobs.values()) { + minsize = Math.min(minsize, j.clen); + maxsize = Math.max(maxsize, j.clen); + avgsize += j.clen; + minl = Math.min(minl, j.minLatency()); + maxl = Math.max(maxl, j.maxLatency()); + totall += j.totalLatency(); + totaln += j.deltime.size(); + fanout += j.deltime.size(); + } + if (jobs.size() > 0) { + avgsize /= jobs.size(); + fanout /= jobs.size(); + } + long avgl = (totaln > 0) ? (totall / totaln) : 0; + return date + "," + feedid + "," + minsize + "," + maxsize + "," + avgsize + "," + minl + "," + maxl + "," + + avgl + "," + fanout; + } + } + + private long getPstart(String t) { + if (t.indexOf('.') >= 0) { + t = t.substring(0, t.indexOf('.')); + } + return Long.parseLong(t); + } - @Override - public void run() { - Map map = new HashMap(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - long start = System.currentTimeMillis(); - try { - DB db = new DB(); - @SuppressWarnings("resource") - Connection conn = db.getConnection(); - PreparedStatement ps = conn.prepareStatement(SELECT_SQL); - ps.setLong(1, from); - ps.setLong(2, to); - ResultSet rs = ps.executeQuery(); - while (rs.next()) { - String id = rs.getString("PUBLISH_ID"); - int feed = rs.getInt("FEEDID"); - long etime = rs.getLong("EVENT_TIME"); - String type = rs.getString("TYPE"); - String fid = rs.getString("FEED_FILEID"); - long clen = rs.getLong("CONTENT_LENGTH"); - String date = sdf.format(new Date(getPstart(id))); - String key = date + "," + feed; - Counters c = map.get(key); - if (c == null) { - c = new Counters(date, feed); - map.put(key, c); - } - c.addEvent(etime, type, id, fid, clen); - } - rs.close(); - ps.close(); - db.release(conn); - } catch (SQLException e) { - e.printStackTrace(); - } - logger.debug("Query time: " + (System.currentTimeMillis()-start) + " ms"); - try { - PrintWriter os = new PrintWriter(outfile); - os.println("date,feedid,minsize,maxsize,avgsize,minlat,maxlat,avglat,fanout"); - for (String key : new TreeSet(map.keySet())) { - Counters c = map.get(key); - os.println(c.toString()); - } - os.close(); - } catch (FileNotFoundException e) { - System.err.println("File cannot be written: "+outfile); - } - } + @Override + public void run() { + Map map = new HashMap<>(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + long start = System.currentTimeMillis(); + try (Connection conn = ProvDbUtils.getInstance().getConnection(); + PreparedStatement ps = conn.prepareStatement( + "select EVENT_TIME, TYPE, PUBLISH_ID, FEED_FILEID, FEEDID, " + + "CONTENT_LENGTH from LOG_RECORDS where EVENT_TIME >= ? and EVENT_TIME <= ?")) { + ps.setLong(1, from); + ps.setLong(2, to); + try (ResultSet rs = ps.executeQuery()) { + while (rs.next()) { + String id = rs.getString("PUBLISH_ID"); + int feed = rs.getInt("FEEDID"); + long etime = rs.getLong("EVENT_TIME"); + String type = rs.getString("TYPE"); + String fid = rs.getString("FEED_FILEID"); + long clen = rs.getLong("CONTENT_LENGTH"); + String date = sdf.format(new Date(getPstart(id))); + String key = date + "," + feed; + Counters c = map.get(key); + if (c == null) { + c = new Counters(date, feed); + map.put(key, c); + } + c.addEvent(etime, type, id, fid, clen); + } + } + } catch (SQLException e) { + logger.error("SQLException: " + e.getMessage()); + } + logger.debug("Query time: " + (System.currentTimeMillis() - start) + " ms"); + try (PrintWriter os = new PrintWriter(outfile)) { + os.println("date,feedid,minsize,maxsize,avgsize,minlat,maxlat,avglat,fanout"); + for (String key : new TreeSet<>(map.keySet())) { + Counters c = map.get(key); + os.println(c.toString()); + } + } catch (FileNotFoundException e) { + System.err.println("File cannot be written: " + outfile); + logger.error("FileNotFoundException: " + e.getMessage()); + } + } }