From d3834c735dd8b0f1368af1bdcd8d26eab3922493 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 May 2017 10:57:35 +0400 Subject: [PATCH 01/38] Adding Autodetect time format in drop-down list that toggles linux time autodetect. --- .../java/net/atomique/ksar/AllParser.java | 35 +++++++++++++++-- .../java/net/atomique/ksar/parser/Linux.java | 39 ++++++++++++------- .../net/atomique/ksar/ui/LinuxDateFormat.java | 1 + .../net/atomique/ksar/ui/Preferences.java | 1 + 4 files changed, 60 insertions(+), 16 deletions(-) diff --git a/src/main/java/net/atomique/ksar/AllParser.java b/src/main/java/net/atomique/ksar/AllParser.java index f6020228..9d8dbf15 100644 --- a/src/main/java/net/atomique/ksar/AllParser.java +++ b/src/main/java/net/atomique/ksar/AllParser.java @@ -14,12 +14,26 @@ import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; +import java.util.HashMap; +import java.util.Map; import java.util.TreeSet; public abstract class AllParser { private static final Logger log = LoggerFactory.getLogger(AllParser.class); - + + private static final Map DATE_FORMAT_REGEXPS = new HashMap() {{ + put("^\\d{8}$", "yyyyMMdd"); + put("^\\d{1,2}-\\d{1,2}-\\d{4}$", "dd-MM-yyyy"); + put("^\\d{4}-\\d{1,2}-\\d{1,2}$", "yyyy-MM-dd"); + put("^\\d{1,2}/\\d{1,2}/\\d{4}$", "MM/dd/yyyy"); + put("^\\d{4}/\\d{1,2}/\\d{1,2}$", "yyyy/MM/dd"); + put("^\\d{1,2}\\s[a-z]{3}\\s\\d{4}$", "dd MMM yyyy"); + put("^\\d{1,2}\\s[a-z]{4,}\\s\\d{4}$", "dd MMMM yyyy"); + put("^\\d{1,2}-\\d{1,2}-\\d{2}$", "dd-MM-yy"); + put("^\\d{1,2}/\\d{1,2}/\\d{2}$", "MM/dd/yy"); + }}; + public AllParser() { } @@ -65,8 +79,14 @@ public boolean setDate(String s) { } try { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat); - currentDate = LocalDate.parse(s, formatter); + DateTimeFormatter formatter; + if(dateFormat.equals("Autodetect")){ + formatter = DateTimeFormatter.ofPattern(determineDateFormat(s)); + currentDate = LocalDate.parse(s, formatter); + }else{ + formatter = DateTimeFormatter.ofPattern(dateFormat); + currentDate = LocalDate.parse(s, formatter); + } parsedate = currentDate; @@ -102,6 +122,15 @@ public TreeSet getDateSamples() { public String getCurrentStat() { return currentStat; } + + public static String determineDateFormat(String dateString) { + for (String regexp : DATE_FORMAT_REGEXPS.keySet()) { + if (dateString.toLowerCase().matches(regexp)) { + return DATE_FORMAT_REGEXPS.get(regexp); + } + } + return null; // Unknown format. + } protected String sarStartDate = null; diff --git a/src/main/java/net/atomique/ksar/parser/Linux.java b/src/main/java/net/atomique/ksar/parser/Linux.java index cf9b1384..fb315314 100644 --- a/src/main/java/net/atomique/ksar/parser/Linux.java +++ b/src/main/java/net/atomique/ksar/parser/Linux.java @@ -51,20 +51,24 @@ private void checkDateFormat() { if ("Always ask".equals(LinuxDateFormat)) { askDateFormat(); } - - // day and year format specifiers must be lower case, month upper case - String[] parts = LinuxDateFormat.split(" ", 3); - - dateFormat = parts[0]; - dateFormat = dateFormat.replaceAll("D{2}", "dd"); - dateFormat = dateFormat.replaceAll("Y{2}", "yy"); - - //12hour - if (parts.length == 3 && parts[2].contains("AM|PM")) { - timeFormat = "hh:mm:ss a"; - timeColumn = 2; + + if("Autodetect".equals(LinuxDateFormat)){ + timeColumn = 0; + dateFormat = "Autodetect"; + }else{ + // day and year format specifiers must be lower case, month upper case + String[] parts = LinuxDateFormat.split(" ", 3); + + dateFormat = parts[0]; + dateFormat = dateFormat.replaceAll("D{2}", "dd"); + dateFormat = dateFormat.replaceAll("Y{2}", "yy"); + + //12hour + if (parts.length == 3 && parts[2].contains("AM|PM")) { + timeFormat = "hh:mm:ss a"; + timeColumn = 2; + } } - } private void askDateFormat() { @@ -96,6 +100,15 @@ public int parse(String line, String[] columns) { } try { + if ( timeColumn == 0 ) { + if ((columns[0]+" "+columns[1]).matches("^\\d\\d:\\d\\d:\\d\\d [AP]M$")) { + timeFormat = "hh:mm:ss a"; + timeColumn=2; + }else{ + timeColumn=1; + } + } + if (timeColumn == 2) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(timeFormat, Locale.US); parsetime = LocalTime.parse(columns[0] + " " + columns[1], formatter); diff --git a/src/main/java/net/atomique/ksar/ui/LinuxDateFormat.java b/src/main/java/net/atomique/ksar/ui/LinuxDateFormat.java index dcf62762..0b02bff0 100644 --- a/src/main/java/net/atomique/ksar/ui/LinuxDateFormat.java +++ b/src/main/java/net/atomique/ksar/ui/LinuxDateFormat.java @@ -32,6 +32,7 @@ private void load_linuxformat() { LinuxFormatComboModel.addElement("MM/DD/YYYY 12:59:59 AM|PM"); LinuxFormatComboModel.addElement("DD/MM/YYYY 12:59:59 AM|PM"); LinuxFormatComboModel.addElement("YYYY-MM-DD 12:59:59 AM|PM"); + LinuxFormatComboModel.addElement("Autodetect"); } /** diff --git a/src/main/java/net/atomique/ksar/ui/Preferences.java b/src/main/java/net/atomique/ksar/ui/Preferences.java index c5a9d86b..d4a8b972 100644 --- a/src/main/java/net/atomique/ksar/ui/Preferences.java +++ b/src/main/java/net/atomique/ksar/ui/Preferences.java @@ -57,6 +57,7 @@ private void load_linuxformat() { LinuxFormatComboModel.addElement("MM/DD/YYYY 12:59:59 AM|PM"); LinuxFormatComboModel.addElement("DD/MM/YYYY 12:59:59 AM|PM"); LinuxFormatComboModel.addElement("YYYY-MM-DD 12:59:59 AM|PM"); + LinuxFormatComboModel.addElement("Autodetect"); jComboBox3.setSelectedItem(Config.getLinuxDateFormat()); } From d90a25f0b14e21383ea085d016b470bf301ff7ac Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 May 2017 11:03:46 +0400 Subject: [PATCH 02/38] CSV output fix, date value was missing --- src/main/java/net/atomique/ksar/export/FileCSV.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/atomique/ksar/export/FileCSV.java b/src/main/java/net/atomique/ksar/export/FileCSV.java index 243a2842..1c4024f2 100644 --- a/src/main/java/net/atomique/ksar/export/FileCSV.java +++ b/src/main/java/net/atomique/ksar/export/FileCSV.java @@ -20,6 +20,7 @@ import java.io.FileWriter; import java.io.IOException; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Iterator; import javax.swing.JDialog; @@ -67,7 +68,12 @@ public void run() { tmpLDT.getDayOfMonth(), tmpLDT.getMonthValue(), tmpLDT.getYear()); - + + //add date to csv + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yy HH:mm:ss"); + String text = tmpLDT.format(formatter); + tmpcsv.append(text+";"); + export_treenode_data(mysar.graphtree, tmp); tmpcsv.append("\n"); } From 6757a134f8fe5a4bc8ea3d3a11d05b26d36b8cc1 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 May 2017 13:05:04 +0400 Subject: [PATCH 03/38] Revert "CSV output fix, date value was missing" This reverts commit d90a25f0b14e21383ea085d016b470bf301ff7ac. --- src/main/java/net/atomique/ksar/export/FileCSV.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/net/atomique/ksar/export/FileCSV.java b/src/main/java/net/atomique/ksar/export/FileCSV.java index 1c4024f2..243a2842 100644 --- a/src/main/java/net/atomique/ksar/export/FileCSV.java +++ b/src/main/java/net/atomique/ksar/export/FileCSV.java @@ -20,7 +20,6 @@ import java.io.FileWriter; import java.io.IOException; import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.util.Iterator; import javax.swing.JDialog; @@ -68,12 +67,7 @@ public void run() { tmpLDT.getDayOfMonth(), tmpLDT.getMonthValue(), tmpLDT.getYear()); - - //add date to csv - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yy HH:mm:ss"); - String text = tmpLDT.format(formatter); - tmpcsv.append(text+";"); - + export_treenode_data(mysar.graphtree, tmp); tmpcsv.append("\n"); } From d1d30a1bc0046e2bc9862a7c62fd30b3226d2be1 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 May 2017 13:08:26 +0400 Subject: [PATCH 04/38] Revert "Adding Autodetect time format in drop-down list that toggles linux time autodetect." This reverts commit d3834c735dd8b0f1368af1bdcd8d26eab3922493. --- .../java/net/atomique/ksar/AllParser.java | 35 ++--------------- .../java/net/atomique/ksar/parser/Linux.java | 39 +++++++------------ .../net/atomique/ksar/ui/LinuxDateFormat.java | 1 - .../net/atomique/ksar/ui/Preferences.java | 1 - 4 files changed, 16 insertions(+), 60 deletions(-) diff --git a/src/main/java/net/atomique/ksar/AllParser.java b/src/main/java/net/atomique/ksar/AllParser.java index 9d8dbf15..f6020228 100644 --- a/src/main/java/net/atomique/ksar/AllParser.java +++ b/src/main/java/net/atomique/ksar/AllParser.java @@ -14,26 +14,12 @@ import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; -import java.util.HashMap; -import java.util.Map; import java.util.TreeSet; public abstract class AllParser { private static final Logger log = LoggerFactory.getLogger(AllParser.class); - - private static final Map DATE_FORMAT_REGEXPS = new HashMap() {{ - put("^\\d{8}$", "yyyyMMdd"); - put("^\\d{1,2}-\\d{1,2}-\\d{4}$", "dd-MM-yyyy"); - put("^\\d{4}-\\d{1,2}-\\d{1,2}$", "yyyy-MM-dd"); - put("^\\d{1,2}/\\d{1,2}/\\d{4}$", "MM/dd/yyyy"); - put("^\\d{4}/\\d{1,2}/\\d{1,2}$", "yyyy/MM/dd"); - put("^\\d{1,2}\\s[a-z]{3}\\s\\d{4}$", "dd MMM yyyy"); - put("^\\d{1,2}\\s[a-z]{4,}\\s\\d{4}$", "dd MMMM yyyy"); - put("^\\d{1,2}-\\d{1,2}-\\d{2}$", "dd-MM-yy"); - put("^\\d{1,2}/\\d{1,2}/\\d{2}$", "MM/dd/yy"); - }}; - + public AllParser() { } @@ -79,14 +65,8 @@ public boolean setDate(String s) { } try { - DateTimeFormatter formatter; - if(dateFormat.equals("Autodetect")){ - formatter = DateTimeFormatter.ofPattern(determineDateFormat(s)); - currentDate = LocalDate.parse(s, formatter); - }else{ - formatter = DateTimeFormatter.ofPattern(dateFormat); - currentDate = LocalDate.parse(s, formatter); - } + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat); + currentDate = LocalDate.parse(s, formatter); parsedate = currentDate; @@ -122,15 +102,6 @@ public TreeSet getDateSamples() { public String getCurrentStat() { return currentStat; } - - public static String determineDateFormat(String dateString) { - for (String regexp : DATE_FORMAT_REGEXPS.keySet()) { - if (dateString.toLowerCase().matches(regexp)) { - return DATE_FORMAT_REGEXPS.get(regexp); - } - } - return null; // Unknown format. - } protected String sarStartDate = null; diff --git a/src/main/java/net/atomique/ksar/parser/Linux.java b/src/main/java/net/atomique/ksar/parser/Linux.java index fb315314..cf9b1384 100644 --- a/src/main/java/net/atomique/ksar/parser/Linux.java +++ b/src/main/java/net/atomique/ksar/parser/Linux.java @@ -51,24 +51,20 @@ private void checkDateFormat() { if ("Always ask".equals(LinuxDateFormat)) { askDateFormat(); } - - if("Autodetect".equals(LinuxDateFormat)){ - timeColumn = 0; - dateFormat = "Autodetect"; - }else{ - // day and year format specifiers must be lower case, month upper case - String[] parts = LinuxDateFormat.split(" ", 3); - - dateFormat = parts[0]; - dateFormat = dateFormat.replaceAll("D{2}", "dd"); - dateFormat = dateFormat.replaceAll("Y{2}", "yy"); - - //12hour - if (parts.length == 3 && parts[2].contains("AM|PM")) { - timeFormat = "hh:mm:ss a"; - timeColumn = 2; - } + + // day and year format specifiers must be lower case, month upper case + String[] parts = LinuxDateFormat.split(" ", 3); + + dateFormat = parts[0]; + dateFormat = dateFormat.replaceAll("D{2}", "dd"); + dateFormat = dateFormat.replaceAll("Y{2}", "yy"); + + //12hour + if (parts.length == 3 && parts[2].contains("AM|PM")) { + timeFormat = "hh:mm:ss a"; + timeColumn = 2; } + } private void askDateFormat() { @@ -100,15 +96,6 @@ public int parse(String line, String[] columns) { } try { - if ( timeColumn == 0 ) { - if ((columns[0]+" "+columns[1]).matches("^\\d\\d:\\d\\d:\\d\\d [AP]M$")) { - timeFormat = "hh:mm:ss a"; - timeColumn=2; - }else{ - timeColumn=1; - } - } - if (timeColumn == 2) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(timeFormat, Locale.US); parsetime = LocalTime.parse(columns[0] + " " + columns[1], formatter); diff --git a/src/main/java/net/atomique/ksar/ui/LinuxDateFormat.java b/src/main/java/net/atomique/ksar/ui/LinuxDateFormat.java index 0b02bff0..dcf62762 100644 --- a/src/main/java/net/atomique/ksar/ui/LinuxDateFormat.java +++ b/src/main/java/net/atomique/ksar/ui/LinuxDateFormat.java @@ -32,7 +32,6 @@ private void load_linuxformat() { LinuxFormatComboModel.addElement("MM/DD/YYYY 12:59:59 AM|PM"); LinuxFormatComboModel.addElement("DD/MM/YYYY 12:59:59 AM|PM"); LinuxFormatComboModel.addElement("YYYY-MM-DD 12:59:59 AM|PM"); - LinuxFormatComboModel.addElement("Autodetect"); } /** diff --git a/src/main/java/net/atomique/ksar/ui/Preferences.java b/src/main/java/net/atomique/ksar/ui/Preferences.java index d4a8b972..c5a9d86b 100644 --- a/src/main/java/net/atomique/ksar/ui/Preferences.java +++ b/src/main/java/net/atomique/ksar/ui/Preferences.java @@ -57,7 +57,6 @@ private void load_linuxformat() { LinuxFormatComboModel.addElement("MM/DD/YYYY 12:59:59 AM|PM"); LinuxFormatComboModel.addElement("DD/MM/YYYY 12:59:59 AM|PM"); LinuxFormatComboModel.addElement("YYYY-MM-DD 12:59:59 AM|PM"); - LinuxFormatComboModel.addElement("Autodetect"); jComboBox3.setSelectedItem(Config.getLinuxDateFormat()); } From 3a38eb6e25c31e60dcb613336597ac62a4414eab Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 May 2017 13:20:33 +0400 Subject: [PATCH 05/38] csv_export_fix --- src/main/java/net/atomique/ksar/export/FileCSV.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/net/atomique/ksar/export/FileCSV.java b/src/main/java/net/atomique/ksar/export/FileCSV.java index 243a2842..d867fe8b 100644 --- a/src/main/java/net/atomique/ksar/export/FileCSV.java +++ b/src/main/java/net/atomique/ksar/export/FileCSV.java @@ -20,6 +20,7 @@ import java.io.FileWriter; import java.io.IOException; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Iterator; import javax.swing.JDialog; @@ -68,6 +69,10 @@ public void run() { tmpLDT.getMonthValue(), tmpLDT.getYear()); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yy HH:mm:ss"); + String text = tmpLDT.format(formatter); + tmpcsv.append(text+";"); + export_treenode_data(mysar.graphtree, tmp); tmpcsv.append("\n"); } From b0fd4bf130f598f547dda0226534e0bcf60ae251 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 May 2017 13:36:52 +0400 Subject: [PATCH 06/38] console mode --- .../java/net/atomique/ksar/GlobalOptions.java | 56 +++++ src/main/java/net/atomique/ksar/Main.java | 224 +++++++++++++++--- .../net/atomique/ksar/export/FilePNG.java | 57 +++++ src/main/java/net/atomique/ksar/kSar.java | 2 +- 4 files changed, 311 insertions(+), 28 deletions(-) create mode 100644 src/main/java/net/atomique/ksar/export/FilePNG.java diff --git a/src/main/java/net/atomique/ksar/GlobalOptions.java b/src/main/java/net/atomique/ksar/GlobalOptions.java index 32d75af1..aad10c30 100644 --- a/src/main/java/net/atomique/ksar/GlobalOptions.java +++ b/src/main/java/net/atomique/ksar/GlobalOptions.java @@ -246,6 +246,56 @@ static void saveHistory() { } + + public static String getOutCSV() { + return outCSV; + } + + public static void setOutCSV(String outCSV) { + GlobalOptions.outCSV = outCSV; + } + + public static String getOutPDF() { + return outPDF; + } + + public static void setOutPDF(String outPDF) { + GlobalOptions.outPDF = outPDF; + } + + public static String getOutIMG() { + return outIMG; + } + + public static void setOutIMG(String outIMG) { + GlobalOptions.outIMG = outIMG; + } + + public static String getOutTags() { + return outTags; + } + + public static void setOutTags(String outTags) { + GlobalOptions.outTags = outTags; + } + + public static int getWidth() { + return width; + } + + public static void setWidth(int width) { + GlobalOptions.width = width; + } + + public static int getHeigth() { + return heigth; + } + + public static void setHeigth(int heigth) { + GlobalOptions.heigth = heigth; + } + + private static Desktop UI = null; private static Properties systemprops; private static String userhome; @@ -259,4 +309,10 @@ static void saveHistory() { private static String CLfilename = null; private static HashMap ParserMap; private static boolean firstrun = true; + private static String outCSV; + private static String outPDF; + private static String outIMG; + private static String outTags; + private static int width = 600; + private static int heigth = 400; } diff --git a/src/main/java/net/atomique/ksar/Main.java b/src/main/java/net/atomique/ksar/Main.java index 029b33c3..a7528aed 100644 --- a/src/main/java/net/atomique/ksar/Main.java +++ b/src/main/java/net/atomique/ksar/Main.java @@ -5,6 +5,14 @@ package net.atomique.ksar; +import net.atomique.ksar.export.FileCSV; +import net.atomique.ksar.export.FilePDF; +import net.atomique.ksar.export.FilePNG; +import net.atomique.ksar.graph.Graph; +import net.atomique.ksar.graph.List; +import net.atomique.ksar.ui.ParentNodeInfo; +import net.atomique.ksar.ui.SortedTreeNode; +import net.atomique.ksar.ui.TreeNodeInfo; import net.atomique.ksar.ui.Desktop; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,14 +26,22 @@ public class Main { private static final Logger log = LoggerFactory.getLogger(Main.class); - + private static boolean gui = true; static Config config = null; static GlobalOptions globaloptions = null; static ResourceBundle resource = ResourceBundle.getBundle("net/atomique/ksar/Language/Message"); public static void usage() { - show_version(); - } + log.info("-input : input sar statistics file \n"); + log.info( "-n : toggles nongui mode for exporting\n"); + log.info( "-outputCSV : location of parsed CSV file\n"); + log.info( "-outputPDF : location of output pdf file\n"); + log.info( "-outputIMG : prefix for output images\n"); + log.info( "-width : width for output png charts\n"); + log.info( "-heigth : heigth for output png charts"); + log.info( "-tags : comma separated list of nodes for export. ex: 'CPU all,Load'"); + System.exit(0); + } public static void show_version() { log.info("ksar Version : {}", VersionNumber.getVersionNumber()); @@ -79,33 +95,105 @@ public static void main(String[] args) { globaloptions = GlobalOptions.getInstance(); + if (args.length > 0) { - while (i < args.length && args[i].startsWith("-")) { - arg = args[i++]; - if ("-version".equals(arg)) { - show_version(); - System.exit(0); + while (i < args.length && args[i].startsWith("-")) { + arg = args[i++]; + if ("-version".equals(arg)) { + show_version(); + System.exit(0); + } + if ("-help".equals(arg)) { + usage(); + continue; + } + if ("-test".equals(arg)) { + GlobalOptions.setDodebug(true); + continue; + } + if ("-input".equals(arg)) { + if (i < args.length) { + GlobalOptions.setCLfilename(args[i++]); + } else { + exit_error(resource.getString("INPUT_REQUIRE_ARG")); + } + continue; + } + if ("-outputCSV".equals(arg)) { + //This will be CSV file to export by deafault + if (i < args.length) { + GlobalOptions.setOutCSV(args[i++]); + } else { + exit_error(resource.getString("INPUT_REQUIRE_ARG")); + } + continue; + } + + if ("-outputPDF".equals(arg)) { + //This will be CSV file to export by deafault + if (i < args.length) { + GlobalOptions.setOutPDF(args[i++]); + } else { + exit_error(resource.getString("INPUT_REQUIRE_ARG")); + } + continue; + } + + //prefix for chart image files + if ("-outputIMG".equals(arg)) { + //This will be CSV file to export by deafault + if (i < args.length) { + GlobalOptions.setOutIMG(args[i++]); + } else { + exit_error(resource.getString("INPUT_REQUIRE_ARG")); + } + continue; + } + + //node names for export comma separated + if ("-tags".equals(arg)) { + //This will be CSV file to export by deafault + if (i < args.length) { + GlobalOptions.setOutTags(args[i++]); + } else { + exit_error(resource.getString("INPUT_REQUIRE_ARG")); + } + continue; + } + + if ("-width".equals(arg)) { + //This will be CSV file to export by deafault + if (i < args.length) { + GlobalOptions.setWidth(Integer.parseInt(args[i++])); + } else { + exit_error(resource.getString("INPUT_REQUIRE_ARG")); + } + continue; + } + + if ("-heigth".equals(arg)) { + //This will be CSV file to export by deafault + if (i < args.length) { + GlobalOptions.setWidth(Integer.parseInt(args[i++])); + } else { + exit_error(resource.getString("INPUT_REQUIRE_ARG")); + } + continue; + } + + if ("-n".equals(arg)) { + //This means nongui mode (same as in jmeter) + gui = false; + continue; + } + } - if ("-help".equals(arg)) { - usage(); - continue; - } - if ("-test".equals(arg)) { - GlobalOptions.setDodebug(true); - continue; - } - if ("-input".equals(arg)) { - if (i < args.length) { - GlobalOptions.setCLfilename(args[i++]); - } else { - exit_error(resource.getString("INPUT_REQUIRE_ARG")); - } - continue; - } - } } - - make_ui(); + + if(gui) + make_ui(); + else + nongui(); } @@ -114,4 +202,86 @@ public static void exit_error(final String message) { System.exit(1); } + + public static void validateTags(SortedTreeNode node) { + int num = node.getChildCount(); + if (num > 0) { + Object obj1 = node.getUserObject(); + if (obj1 instanceof ParentNodeInfo) { + ParentNodeInfo tmpnode = (ParentNodeInfo) obj1; + List nodeobj = tmpnode.getNode_object(); + } + for (int i = 0; i < num; i++) { + SortedTreeNode l = (SortedTreeNode) node.getChildAt(i); + validateTags(l); + } + } else { + Object obj1 = node.getUserObject(); + if (obj1 instanceof TreeNodeInfo) { + TreeNodeInfo tmpnode = (TreeNodeInfo) obj1; + Graph nodeobj = tmpnode.getNode_object(); + nodeobj.printSelected=false; + for(String nodename : GlobalOptions.getOutTags().split(",")){ + if(nodeobj.getTitle().equals(nodename)){ + nodeobj.printSelected=true; + } + } + } + } + } + + public static void nongui() { + kSar ks = new kSar(); + + ks.do_fileread(GlobalOptions.getCLfilename()); + while(ks.launched_action.isAlive()){ + try { + Thread.sleep(1); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + //filter out graph nodes for given tags + if(GlobalOptions.getOutTags() != null){ + validateTags(ks.graphtree); + } + + log.trace("File parsing completed. Starting export"); + if(GlobalOptions.getOutCSV() != null){ + Runnable t = new FileCSV(GlobalOptions.getOutCSV(), ks); + Thread th = new Thread(t); + th.start(); + while(th.isAlive()){ + try { + Thread.sleep(1); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + log.trace("CSV Export completed"); + } + + if(GlobalOptions.getOutPDF() != null){ + Runnable t = new FilePDF(GlobalOptions.getOutPDF(), ks); + Thread th = new Thread(t); + th.start(); + while(th.isAlive()){ + try { + Thread.sleep(1); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + log.trace("PDF Export completed"); + } + if(GlobalOptions.getOutIMG() != null){ + FilePNG.drawCharts(ks.graphtree,ks); + log.trace("IMG Export completed"); + } + + } } diff --git a/src/main/java/net/atomique/ksar/export/FilePNG.java b/src/main/java/net/atomique/ksar/export/FilePNG.java new file mode 100644 index 00000000..1ecd9261 --- /dev/null +++ b/src/main/java/net/atomique/ksar/export/FilePNG.java @@ -0,0 +1,57 @@ +package net.atomique.ksar.export; + +import java.io.File; +import java.io.IOException; + +import org.jfree.chart.ChartUtilities; +import org.jfree.chart.JFreeChart; + +import net.atomique.ksar.GlobalOptions; +import net.atomique.ksar.kSar; +import net.atomique.ksar.graph.Graph; +import net.atomique.ksar.graph.List; +import net.atomique.ksar.ui.ParentNodeInfo; +import net.atomique.ksar.ui.SortedTreeNode; +import net.atomique.ksar.ui.TreeNodeInfo; + +public class FilePNG { + public static int addchart(String path, Graph graph, kSar mysar) { + int pagewidth = GlobalOptions.getWidth(); + int pageheight = GlobalOptions.getHeigth(); + JFreeChart chart = graph.getgraph(mysar.myparser.get_startofgraph(),mysar.myparser.get_endofgraph()); + try { + ChartUtilities.saveChartAsPNG(new File(path), chart, pagewidth, pageheight); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return 0; + } + + + public static void drawCharts(SortedTreeNode node, kSar mysar) { + int num = node.getChildCount(); + if (num > 0) { + Object obj1 = node.getUserObject(); + if (obj1 instanceof ParentNodeInfo) { + ParentNodeInfo tmpnode = (ParentNodeInfo) obj1; + List nodeobj = tmpnode.getNode_object(); + } + for (int i = 0; i < num; i++) { + SortedTreeNode l = (SortedTreeNode) node.getChildAt(i); + drawCharts(l, mysar); + } + } else { + Object obj1 = node.getUserObject(); + if (obj1 instanceof TreeNodeInfo) { + TreeNodeInfo tmpnode = (TreeNodeInfo) obj1; + Graph nodeobj = tmpnode.getNode_object(); + if(nodeobj.printSelected){ + addchart(GlobalOptions.getOutIMG()+nodeobj.getTitle()+".png", nodeobj, mysar); + } + + } + } + } +} diff --git a/src/main/java/net/atomique/ksar/kSar.java b/src/main/java/net/atomique/ksar/kSar.java index 9c067015..db38f68d 100644 --- a/src/main/java/net/atomique/ksar/kSar.java +++ b/src/main/java/net/atomique/ksar/kSar.java @@ -239,7 +239,7 @@ public boolean isParsing() { DataView dataview = null; private long lines_parsed = 0L; private String reload_action = "Empty"; - private Thread launched_action = null; + public Thread launched_action = null; private boolean action_interrupted = false; public AllParser myparser = null; private boolean Parsing = false; From d7dde919271fdd09c5cb4c93cdbd2aba5cdde2ca Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 May 2017 13:38:48 +0400 Subject: [PATCH 07/38] style fix --- src/main/java/net/atomique/ksar/export/FileCSV.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/net/atomique/ksar/export/FileCSV.java b/src/main/java/net/atomique/ksar/export/FileCSV.java index d867fe8b..c517914f 100644 --- a/src/main/java/net/atomique/ksar/export/FileCSV.java +++ b/src/main/java/net/atomique/ksar/export/FileCSV.java @@ -71,8 +71,7 @@ public void run() { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yy HH:mm:ss"); String text = tmpLDT.format(formatter); - tmpcsv.append(text+";"); - + tmpcsv.append(text + ";"); export_treenode_data(mysar.graphtree, tmp); tmpcsv.append("\n"); } From 0890d08dd6afa003ea026b6a8d0623a9dd06ef8d Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 May 2017 13:50:56 +0400 Subject: [PATCH 08/38] autodetect option --- .../java/net/atomique/ksar/AllParser.java | 43 ++++++++++++++++--- .../java/net/atomique/ksar/parser/Linux.java | 20 +++++++-- .../net/atomique/ksar/ui/LinuxDateFormat.java | 1 + .../net/atomique/ksar/ui/Preferences.java | 1 + 4 files changed, 55 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/atomique/ksar/AllParser.java b/src/main/java/net/atomique/ksar/AllParser.java index f6020228..f8e2d2f4 100644 --- a/src/main/java/net/atomique/ksar/AllParser.java +++ b/src/main/java/net/atomique/ksar/AllParser.java @@ -14,12 +14,26 @@ import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; +import java.util.HashMap; +import java.util.Map; import java.util.TreeSet; public abstract class AllParser { private static final Logger log = LoggerFactory.getLogger(AllParser.class); - + private static final Map DATE_FORMAT_REGEXPS = new HashMap() { + { + put("^\\d{8}$", "yyyyMMdd"); + put("^\\d{1,2}-\\d{1,2}-\\d{4}$", "dd-MM-yyyy"); + put("^\\d{4}-\\d{1,2}-\\d{1,2}$", "yyyy-MM-dd"); + put("^\\d{1,2}/\\d{1,2}/\\d{4}$", "MM/dd/yyyy"); + put("^\\d{4}/\\d{1,2}/\\d{1,2}$", "yyyy/MM/dd"); + put("^\\d{1,2}\\s[a-z]{3}\\s\\d{4}$", "dd MMM yyyy"); + put("^\\d{1,2}\\s[a-z]{4,}\\s\\d{4}$", "dd MMMM yyyy"); + put("^\\d{1,2}-\\d{1,2}-\\d{2}$", "dd-MM-yy"); + put("^\\d{1,2}/\\d{1,2}/\\d{2}$", "MM/dd/yy"); + } + }; public AllParser() { } @@ -64,14 +78,21 @@ public boolean setDate(String s) { sarEndDate = s; } - try { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat); - currentDate = LocalDate.parse(s, formatter); + try { + DateTimeFormatter formatter; + if ("".equals(dateFormat)) { + formatter = DateTimeFormatter.ofPattern(determineDateFormat(s)); + + } else { + formatter = DateTimeFormatter.ofPattern(dateFormat); + } + + currentDate = LocalDate.parse(s, formatter); - parsedate = currentDate; + parsedate = currentDate; - startDate = LocalDate.parse(sarStartDate, formatter); - endDate = LocalDate.parse(sarEndDate, formatter); + startDate = LocalDate.parse(sarStartDate, formatter); + endDate = LocalDate.parse(sarEndDate, formatter); } catch (DateTimeParseException ex) { log.error("unable to parse date {}", s, ex); @@ -103,6 +124,14 @@ public String getCurrentStat() { return currentStat; } + public static String determineDateFormat(String dateString) { + for (String regexp : DATE_FORMAT_REGEXPS.keySet()) { + if (dateString.toLowerCase().matches(regexp)) { + return DATE_FORMAT_REGEXPS.get(regexp); + } + } + return null; // Unknown format. + } protected String sarStartDate = null; protected String sarEndDate = null; diff --git a/src/main/java/net/atomique/ksar/parser/Linux.java b/src/main/java/net/atomique/ksar/parser/Linux.java index cf9b1384..3d796b87 100644 --- a/src/main/java/net/atomique/ksar/parser/Linux.java +++ b/src/main/java/net/atomique/ksar/parser/Linux.java @@ -51,6 +51,11 @@ private void checkDateFormat() { if ("Always ask".equals(LinuxDateFormat)) { askDateFormat(); } + + if("Automatic Detection".equals(LinuxDateFormat)){ + dateFormat="Automatic Detection"; + timeColumn=0; + } // day and year format specifiers must be lower case, month upper case String[] parts = LinuxDateFormat.split(" ", 3); @@ -95,9 +100,18 @@ public int parse(String line, String[] columns) { return 0; } - try { - if (timeColumn == 2) { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern(timeFormat, Locale.US); + try { + if (timeColumn == 0) { + if ((columns[0] + " " + columns[1]).matches("^\\d\\d:\\d\\d:\\d\\d [AP]M$")) { + timeFormat = "hh:mm:ss a"; + timeColumn = 2; + } else { + timeColumn = 1; + } + } + + if (timeColumn == 2) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(timeFormat, Locale.US); parsetime = LocalTime.parse(columns[0] + " " + columns[1], formatter); } else { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(timeFormat); diff --git a/src/main/java/net/atomique/ksar/ui/LinuxDateFormat.java b/src/main/java/net/atomique/ksar/ui/LinuxDateFormat.java index dcf62762..5f5a08d4 100644 --- a/src/main/java/net/atomique/ksar/ui/LinuxDateFormat.java +++ b/src/main/java/net/atomique/ksar/ui/LinuxDateFormat.java @@ -32,6 +32,7 @@ private void load_linuxformat() { LinuxFormatComboModel.addElement("MM/DD/YYYY 12:59:59 AM|PM"); LinuxFormatComboModel.addElement("DD/MM/YYYY 12:59:59 AM|PM"); LinuxFormatComboModel.addElement("YYYY-MM-DD 12:59:59 AM|PM"); + LinuxFormatComboModel.addElement("Automatic Detection"); } /** diff --git a/src/main/java/net/atomique/ksar/ui/Preferences.java b/src/main/java/net/atomique/ksar/ui/Preferences.java index c5a9d86b..1d8daf88 100644 --- a/src/main/java/net/atomique/ksar/ui/Preferences.java +++ b/src/main/java/net/atomique/ksar/ui/Preferences.java @@ -57,6 +57,7 @@ private void load_linuxformat() { LinuxFormatComboModel.addElement("MM/DD/YYYY 12:59:59 AM|PM"); LinuxFormatComboModel.addElement("DD/MM/YYYY 12:59:59 AM|PM"); LinuxFormatComboModel.addElement("YYYY-MM-DD 12:59:59 AM|PM"); + LinuxFormatComboModel.addElement("Automatic Detection"); jComboBox3.setSelectedItem(Config.getLinuxDateFormat()); } From 51bd259a825fab892f1bfab1935f16edd97597e9 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 May 2017 13:52:30 +0400 Subject: [PATCH 09/38] remove_trailing --- src/main/java/net/atomique/ksar/export/FileCSV.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/atomique/ksar/export/FileCSV.java b/src/main/java/net/atomique/ksar/export/FileCSV.java index c517914f..6de3f2d2 100644 --- a/src/main/java/net/atomique/ksar/export/FileCSV.java +++ b/src/main/java/net/atomique/ksar/export/FileCSV.java @@ -71,7 +71,7 @@ public void run() { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yy HH:mm:ss"); String text = tmpLDT.format(formatter); - tmpcsv.append(text + ";"); + tmpcsv.append(text + ";"); export_treenode_data(mysar.graphtree, tmp); tmpcsv.append("\n"); } From dc34f539cbb72ce8a80afc9374acbb396abd6251 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 May 2017 14:07:44 +0400 Subject: [PATCH 10/38] adding graph fix --- src/main/java/net/atomique/ksar/Main.java | 152 +++++++++--------- .../net/atomique/ksar/export/FilePNG.java | 73 +++++---- src/main/java/net/atomique/ksar/kSar.java | 12 +- 3 files changed, 119 insertions(+), 118 deletions(-) diff --git a/src/main/java/net/atomique/ksar/Main.java b/src/main/java/net/atomique/ksar/Main.java index a7528aed..b80bf6a5 100644 --- a/src/main/java/net/atomique/ksar/Main.java +++ b/src/main/java/net/atomique/ksar/Main.java @@ -31,17 +31,17 @@ public class Main { static GlobalOptions globaloptions = null; static ResourceBundle resource = ResourceBundle.getBundle("net/atomique/ksar/Language/Message"); - public static void usage() { - log.info("-input : input sar statistics file \n"); - log.info( "-n : toggles nongui mode for exporting\n"); - log.info( "-outputCSV : location of parsed CSV file\n"); - log.info( "-outputPDF : location of output pdf file\n"); - log.info( "-outputIMG : prefix for output images\n"); - log.info( "-width : width for output png charts\n"); - log.info( "-heigth : heigth for output png charts"); - log.info( "-tags : comma separated list of nodes for export. ex: 'CPU all,Load'"); - System.exit(0); - } + public static void usage() { + log.info("-input : input sar statistics file \n"); + log.info("-n : toggles nongui mode for exporting\n"); + log.info("-outputCSV : location of parsed CSV file\n"); + log.info("-outputPDF : location of output pdf file\n"); + log.info("-outputIMG : prefix for output images\n"); + log.info("-width : width for output png charts\n"); + log.info("-heigth : heigth for output png charts"); + log.info("-tags : comma separated list of nodes for export. ex: 'CPU all,Load'"); + System.exit(0); + } public static void show_version() { log.info("ksar Version : {}", VersionNumber.getVersionNumber()); @@ -203,85 +203,85 @@ public static void exit_error(final String message) { } - public static void validateTags(SortedTreeNode node) { - int num = node.getChildCount(); - if (num > 0) { - Object obj1 = node.getUserObject(); - if (obj1 instanceof ParentNodeInfo) { - ParentNodeInfo tmpnode = (ParentNodeInfo) obj1; - List nodeobj = tmpnode.getNode_object(); - } - for (int i = 0; i < num; i++) { - SortedTreeNode l = (SortedTreeNode) node.getChildAt(i); - validateTags(l); - } - } else { - Object obj1 = node.getUserObject(); - if (obj1 instanceof TreeNodeInfo) { - TreeNodeInfo tmpnode = (TreeNodeInfo) obj1; - Graph nodeobj = tmpnode.getNode_object(); - nodeobj.printSelected=false; - for(String nodename : GlobalOptions.getOutTags().split(",")){ - if(nodeobj.getTitle().equals(nodename)){ - nodeobj.printSelected=true; - } - } - } - } - } - - public static void nongui() { - kSar ks = new kSar(); + public static void validateTags(SortedTreeNode node) { + int num = node.getChildCount(); + if (num > 0) { + Object obj1 = node.getUserObject(); + if (obj1 instanceof ParentNodeInfo) { + ParentNodeInfo tmpnode = (ParentNodeInfo) obj1; + List nodeobj = tmpnode.getNode_object(); + } + for (int i = 0; i < num; i++) { + SortedTreeNode l = (SortedTreeNode) node.getChildAt(i); + validateTags(l); + } + } else { + Object obj1 = node.getUserObject(); + if (obj1 instanceof TreeNodeInfo) { + TreeNodeInfo tmpnode = (TreeNodeInfo) obj1; + Graph nodeobj = tmpnode.getNode_object(); + nodeobj.printSelected = false; + for (String nodename : GlobalOptions.getOutTags().split(",")) { + if (nodeobj.getTitle().equals(nodename)) { + nodeobj.printSelected = true; + } + } + } + } + } + + public static void nongui() { + kSar ks = new kSar(); - ks.do_fileread(GlobalOptions.getCLfilename()); - while(ks.launched_action.isAlive()){ - try { + ks.do_fileread(GlobalOptions.getCLfilename()); + while (ks.launched_action.isAlive()) { + try { Thread.sleep(1); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } - } - - //filter out graph nodes for given tags - if(GlobalOptions.getOutTags() != null){ - validateTags(ks.graphtree); - } - - log.trace("File parsing completed. Starting export"); - if(GlobalOptions.getOutCSV() != null){ - Runnable t = new FileCSV(GlobalOptions.getOutCSV(), ks); - Thread th = new Thread(t); - th.start(); - while(th.isAlive()){ - try { + } + + // filter out graph nodes for given tags + if (GlobalOptions.getOutTags() != null) { + validateTags(ks.graphtree); + } + + log.trace("File parsing completed. Starting export"); + if (GlobalOptions.getOutCSV() != null) { + Runnable t = new FileCSV(GlobalOptions.getOutCSV(), ks); + Thread th = new Thread(t); + th.start(); + while (th.isAlive()) { + try { Thread.sleep(1); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } - } - log.trace("CSV Export completed"); - } - - if(GlobalOptions.getOutPDF() != null){ - Runnable t = new FilePDF(GlobalOptions.getOutPDF(), ks); - Thread th = new Thread(t); - th.start(); - while(th.isAlive()){ - try { + } + log.trace("CSV Export completed"); + } + + if (GlobalOptions.getOutPDF() != null) { + Runnable t = new FilePDF(GlobalOptions.getOutPDF(), ks); + Thread th = new Thread(t); + th.start(); + while (th.isAlive()) { + try { Thread.sleep(1); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } - } - log.trace("PDF Export completed"); - } - if(GlobalOptions.getOutIMG() != null){ - FilePNG.drawCharts(ks.graphtree,ks); - log.trace("IMG Export completed"); - } - - } + } + log.trace("PDF Export completed"); + } + if (GlobalOptions.getOutIMG() != null) { + FilePNG.drawCharts(ks.graphtree, ks); + log.trace("IMG Export completed"); + } + + } } diff --git a/src/main/java/net/atomique/ksar/export/FilePNG.java b/src/main/java/net/atomique/ksar/export/FilePNG.java index 1ecd9261..a9a20eb6 100644 --- a/src/main/java/net/atomique/ksar/export/FilePNG.java +++ b/src/main/java/net/atomique/ksar/export/FilePNG.java @@ -15,43 +15,42 @@ import net.atomique.ksar.ui.TreeNodeInfo; public class FilePNG { - public static int addchart(String path, Graph graph, kSar mysar) { - int pagewidth = GlobalOptions.getWidth(); - int pageheight = GlobalOptions.getHeigth(); - JFreeChart chart = graph.getgraph(mysar.myparser.get_startofgraph(),mysar.myparser.get_endofgraph()); - try { - ChartUtilities.saveChartAsPNG(new File(path), chart, pagewidth, pageheight); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + public static int addchart(String path, Graph graph, kSar mysar) { + int pagewidth = GlobalOptions.getWidth(); + int pageheight = GlobalOptions.getHeigth(); + JFreeChart chart = graph.getgraph(mysar.myparser.get_startofgraph(), mysar.myparser.get_endofgraph()); + try { + ChartUtilities.saveChartAsPNG(new File(path), chart, pagewidth, pageheight); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return 0; + } + + public static void drawCharts(SortedTreeNode node, kSar mysar) { + int num = node.getChildCount(); + if (num > 0) { + Object obj1 = node.getUserObject(); + if (obj1 instanceof ParentNodeInfo) { + ParentNodeInfo tmpnode = (ParentNodeInfo) obj1; + List nodeobj = tmpnode.getNode_object(); } - - return 0; - } - - - public static void drawCharts(SortedTreeNode node, kSar mysar) { - int num = node.getChildCount(); - if (num > 0) { - Object obj1 = node.getUserObject(); - if (obj1 instanceof ParentNodeInfo) { - ParentNodeInfo tmpnode = (ParentNodeInfo) obj1; - List nodeobj = tmpnode.getNode_object(); - } - for (int i = 0; i < num; i++) { - SortedTreeNode l = (SortedTreeNode) node.getChildAt(i); - drawCharts(l, mysar); - } - } else { - Object obj1 = node.getUserObject(); - if (obj1 instanceof TreeNodeInfo) { - TreeNodeInfo tmpnode = (TreeNodeInfo) obj1; - Graph nodeobj = tmpnode.getNode_object(); - if(nodeobj.printSelected){ - addchart(GlobalOptions.getOutIMG()+nodeobj.getTitle()+".png", nodeobj, mysar); - } + for (int i = 0; i < num; i++) { + SortedTreeNode l = (SortedTreeNode) node.getChildAt(i); + drawCharts(l, mysar); + } + } else { + Object obj1 = node.getUserObject(); + if (obj1 instanceof TreeNodeInfo) { + TreeNodeInfo tmpnode = (TreeNodeInfo) obj1; + Graph nodeobj = tmpnode.getNode_object(); + if (nodeobj.printSelected) { + addchart(GlobalOptions.getOutIMG() + nodeobj.getTitle() + ".png", nodeobj, mysar); + } - } - } - } + } + } + } } diff --git a/src/main/java/net/atomique/ksar/kSar.java b/src/main/java/net/atomique/ksar/kSar.java index db38f68d..8bb42c64 100644 --- a/src/main/java/net/atomique/ksar/kSar.java +++ b/src/main/java/net/atomique/ksar/kSar.java @@ -195,11 +195,13 @@ public void interrupt_parsing() { } } - public void add2tree(SortedTreeNode parent, SortedTreeNode newNode) { - if (dataview != null) { - dataview.add2tree(parent, newNode); - } - } + public void add2tree(SortedTreeNode parent, SortedTreeNode newNode) { + if (dataview != null) { + dataview.add2tree(parent, newNode); + } else { + parent.insert(newNode, parent.getChildCount()); + } + } public int get_page_to_print() { page_to_print = 0; From 810b2ba2d0620a7fad8c92058a33d4c20e469e7c Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 May 2017 14:17:14 +0400 Subject: [PATCH 11/38] fix of format --- .../java/net/atomique/ksar/GlobalOptions.java | 36 +- src/main/java/net/atomique/ksar/Main.java | 372 +++++++++--------- .../net/atomique/ksar/export/FilePNG.java | 77 ++-- src/main/java/net/atomique/ksar/kSar.java | 14 +- 4 files changed, 247 insertions(+), 252 deletions(-) diff --git a/src/main/java/net/atomique/ksar/GlobalOptions.java b/src/main/java/net/atomique/ksar/GlobalOptions.java index aad10c30..533ce66c 100644 --- a/src/main/java/net/atomique/ksar/GlobalOptions.java +++ b/src/main/java/net/atomique/ksar/GlobalOptions.java @@ -246,55 +246,53 @@ static void saveHistory() { } - public static String getOutCSV() { - return outCSV; + return outCSV; } public static void setOutCSV(String outCSV) { - GlobalOptions.outCSV = outCSV; + GlobalOptions.outCSV = outCSV; } public static String getOutPDF() { - return outPDF; + return outPDF; } public static void setOutPDF(String outPDF) { - GlobalOptions.outPDF = outPDF; + GlobalOptions.outPDF = outPDF; } public static String getOutIMG() { - return outIMG; + return outIMG; } public static void setOutIMG(String outIMG) { - GlobalOptions.outIMG = outIMG; + GlobalOptions.outIMG = outIMG; } public static String getOutTags() { - return outTags; + return outTags; } public static void setOutTags(String outTags) { - GlobalOptions.outTags = outTags; + GlobalOptions.outTags = outTags; } public static int getWidth() { - return width; + return width; } public static void setWidth(int width) { - GlobalOptions.width = width; + GlobalOptions.width = width; } public static int getHeigth() { - return heigth; + return heigth; } - public static void setHeigth(int heigth) { - GlobalOptions.heigth = heigth; - } - + public static void setHeigth(int heigth) { + GlobalOptions.heigth = heigth; + } private static Desktop UI = null; private static Properties systemprops; @@ -309,10 +307,10 @@ public static void setHeigth(int heigth) { private static String CLfilename = null; private static HashMap ParserMap; private static boolean firstrun = true; - private static String outCSV; + private static String outCSV; private static String outPDF; - private static String outIMG; - private static String outTags; + private static String outIMG; + private static String outTags; private static int width = 600; private static int heigth = 400; } diff --git a/src/main/java/net/atomique/ksar/Main.java b/src/main/java/net/atomique/ksar/Main.java index b80bf6a5..5e5b375f 100644 --- a/src/main/java/net/atomique/ksar/Main.java +++ b/src/main/java/net/atomique/ksar/Main.java @@ -31,17 +31,17 @@ public class Main { static GlobalOptions globaloptions = null; static ResourceBundle resource = ResourceBundle.getBundle("net/atomique/ksar/Language/Message"); - public static void usage() { - log.info("-input : input sar statistics file \n"); - log.info("-n : toggles nongui mode for exporting\n"); - log.info("-outputCSV : location of parsed CSV file\n"); - log.info("-outputPDF : location of output pdf file\n"); - log.info("-outputIMG : prefix for output images\n"); - log.info("-width : width for output png charts\n"); - log.info("-heigth : heigth for output png charts"); - log.info("-tags : comma separated list of nodes for export. ex: 'CPU all,Load'"); - System.exit(0); - } + public static void usage() { + log.info("-input : input sar statistics file \n"); + log.info("-n : toggles nongui mode for exporting\n"); + log.info("-outputCSV : location of parsed CSV file\n"); + log.info("-outputPDF : location of output pdf file\n"); + log.info("-outputIMG : prefix for output images\n"); + log.info("-width : width for output png charts\n"); + log.info("-heigth : heigth for output png charts"); + log.info("-tags : comma separated list of nodes for export. ex: 'CPU all,Load'"); + System.exit(0); + } public static void show_version() { log.info("ksar Version : {}", VersionNumber.getVersionNumber()); @@ -94,106 +94,104 @@ public static void main(String[] args) { config = Config.getInstance(); globaloptions = GlobalOptions.getInstance(); + if (args.length > 0) { + while (i < args.length && args[i].startsWith("-")) { + arg = args[i++]; + if ("-version".equals(arg)) { + show_version(); + System.exit(0); + } + if ("-help".equals(arg)) { + usage(); + continue; + } + if ("-test".equals(arg)) { + GlobalOptions.setDodebug(true); + continue; + } + if ("-input".equals(arg)) { + if (i < args.length) { + GlobalOptions.setCLfilename(args[i++]); + } else { + exit_error(resource.getString("INPUT_REQUIRE_ARG")); + } + continue; + } + if ("-outputCSV".equals(arg)) { + // This will be CSV file to export by deafault + if (i < args.length) { + GlobalOptions.setOutCSV(args[i++]); + } else { + exit_error(resource.getString("INPUT_REQUIRE_ARG")); + } + continue; + } + + if ("-outputPDF".equals(arg)) { + // This will be CSV file to export by deafault + if (i < args.length) { + GlobalOptions.setOutPDF(args[i++]); + } else { + exit_error(resource.getString("INPUT_REQUIRE_ARG")); + } + continue; + } + // prefix for chart image files + if ("-outputIMG".equals(arg)) { + // This will be CSV file to export by deafault + if (i < args.length) { + GlobalOptions.setOutIMG(args[i++]); + } else { + exit_error(resource.getString("INPUT_REQUIRE_ARG")); + } + continue; + } - if (args.length > 0) { - while (i < args.length && args[i].startsWith("-")) { - arg = args[i++]; - if ("-version".equals(arg)) { - show_version(); - System.exit(0); - } - if ("-help".equals(arg)) { - usage(); - continue; - } - if ("-test".equals(arg)) { - GlobalOptions.setDodebug(true); - continue; - } - if ("-input".equals(arg)) { - if (i < args.length) { - GlobalOptions.setCLfilename(args[i++]); - } else { - exit_error(resource.getString("INPUT_REQUIRE_ARG")); - } - continue; - } - if ("-outputCSV".equals(arg)) { - //This will be CSV file to export by deafault - if (i < args.length) { - GlobalOptions.setOutCSV(args[i++]); - } else { - exit_error(resource.getString("INPUT_REQUIRE_ARG")); - } - continue; - } - - if ("-outputPDF".equals(arg)) { - //This will be CSV file to export by deafault - if (i < args.length) { - GlobalOptions.setOutPDF(args[i++]); - } else { - exit_error(resource.getString("INPUT_REQUIRE_ARG")); - } - continue; - } - - //prefix for chart image files - if ("-outputIMG".equals(arg)) { - //This will be CSV file to export by deafault - if (i < args.length) { - GlobalOptions.setOutIMG(args[i++]); - } else { - exit_error(resource.getString("INPUT_REQUIRE_ARG")); - } - continue; - } - - //node names for export comma separated - if ("-tags".equals(arg)) { - //This will be CSV file to export by deafault - if (i < args.length) { - GlobalOptions.setOutTags(args[i++]); - } else { - exit_error(resource.getString("INPUT_REQUIRE_ARG")); - } - continue; - } - - if ("-width".equals(arg)) { - //This will be CSV file to export by deafault - if (i < args.length) { - GlobalOptions.setWidth(Integer.parseInt(args[i++])); - } else { - exit_error(resource.getString("INPUT_REQUIRE_ARG")); - } - continue; - } - - if ("-heigth".equals(arg)) { - //This will be CSV file to export by deafault - if (i < args.length) { - GlobalOptions.setWidth(Integer.parseInt(args[i++])); - } else { - exit_error(resource.getString("INPUT_REQUIRE_ARG")); - } - continue; - } - - if ("-n".equals(arg)) { - //This means nongui mode (same as in jmeter) - gui = false; - continue; - } - + // node names for export comma separated + if ("-tags".equals(arg)) { + // This will be CSV file to export by deafault + if (i < args.length) { + GlobalOptions.setOutTags(args[i++]); + } else { + exit_error(resource.getString("INPUT_REQUIRE_ARG")); + } + continue; } + + if ("-width".equals(arg)) { + // This will be CSV file to export by deafault + if (i < args.length) { + GlobalOptions.setWidth(Integer.parseInt(args[i++])); + } else { + exit_error(resource.getString("INPUT_REQUIRE_ARG")); + } + continue; + } + + if ("-heigth".equals(arg)) { + // This will be CSV file to export by deafault + if (i < args.length) { + GlobalOptions.setWidth(Integer.parseInt(args[i++])); + } else { + exit_error(resource.getString("INPUT_REQUIRE_ARG")); + } + continue; + } + + if ("-n".equals(arg)) { + // This means nongui mode (same as in jmeter) + gui = false; + continue; + } + + } } - - if(gui) - make_ui(); + + if (gui) + make_ui(); else - nongui(); + nongui(); } @@ -203,85 +201,85 @@ public static void exit_error(final String message) { } - public static void validateTags(SortedTreeNode node) { - int num = node.getChildCount(); - if (num > 0) { - Object obj1 = node.getUserObject(); - if (obj1 instanceof ParentNodeInfo) { - ParentNodeInfo tmpnode = (ParentNodeInfo) obj1; - List nodeobj = tmpnode.getNode_object(); - } - for (int i = 0; i < num; i++) { - SortedTreeNode l = (SortedTreeNode) node.getChildAt(i); - validateTags(l); - } - } else { - Object obj1 = node.getUserObject(); - if (obj1 instanceof TreeNodeInfo) { - TreeNodeInfo tmpnode = (TreeNodeInfo) obj1; - Graph nodeobj = tmpnode.getNode_object(); - nodeobj.printSelected = false; - for (String nodename : GlobalOptions.getOutTags().split(",")) { - if (nodeobj.getTitle().equals(nodename)) { - nodeobj.printSelected = true; - } - } - } - } - } - - public static void nongui() { - kSar ks = new kSar(); - - ks.do_fileread(GlobalOptions.getCLfilename()); - while (ks.launched_action.isAlive()) { - try { - Thread.sleep(1); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - // filter out graph nodes for given tags - if (GlobalOptions.getOutTags() != null) { - validateTags(ks.graphtree); - } - - log.trace("File parsing completed. Starting export"); - if (GlobalOptions.getOutCSV() != null) { - Runnable t = new FileCSV(GlobalOptions.getOutCSV(), ks); - Thread th = new Thread(t); - th.start(); - while (th.isAlive()) { - try { - Thread.sleep(1); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - log.trace("CSV Export completed"); - } - - if (GlobalOptions.getOutPDF() != null) { - Runnable t = new FilePDF(GlobalOptions.getOutPDF(), ks); - Thread th = new Thread(t); - th.start(); - while (th.isAlive()) { - try { - Thread.sleep(1); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - log.trace("PDF Export completed"); - } - if (GlobalOptions.getOutIMG() != null) { - FilePNG.drawCharts(ks.graphtree, ks); - log.trace("IMG Export completed"); - } - - } + public static void validateTags(SortedTreeNode node) { + int num = node.getChildCount(); + if (num > 0) { + Object obj1 = node.getUserObject(); + if (obj1 instanceof ParentNodeInfo) { + ParentNodeInfo tmpnode = (ParentNodeInfo) obj1; + List nodeobj = tmpnode.getNode_object(); + } + for (int i = 0; i < num; i++) { + SortedTreeNode l = (SortedTreeNode) node.getChildAt(i); + validateTags(l); + } + } else { + Object obj1 = node.getUserObject(); + if (obj1 instanceof TreeNodeInfo) { + TreeNodeInfo tmpnode = (TreeNodeInfo) obj1; + Graph nodeobj = tmpnode.getNode_object(); + nodeobj.printSelected = false; + for (String nodename : GlobalOptions.getOutTags().split(",")) { + if (nodeobj.getTitle().equals(nodename)) { + nodeobj.printSelected = true; + } + } + } + } + } + + public static void nongui() { + kSar ks = new kSar(); + + ks.do_fileread(GlobalOptions.getCLfilename()); + while (ks.launched_action.isAlive()) { + try { + Thread.sleep(1); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + // filter out graph nodes for given tags + if (GlobalOptions.getOutTags() != null) { + validateTags(ks.graphtree); + } + + log.trace("File parsing completed. Starting export"); + if (GlobalOptions.getOutCSV() != null) { + Runnable t = new FileCSV(GlobalOptions.getOutCSV(), ks); + Thread th = new Thread(t); + th.start(); + while (th.isAlive()) { + try { + Thread.sleep(1); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + log.trace("CSV Export completed"); + } + + if (GlobalOptions.getOutPDF() != null) { + Runnable t = new FilePDF(GlobalOptions.getOutPDF(), ks); + Thread th = new Thread(t); + th.start(); + while (th.isAlive()) { + try { + Thread.sleep(1); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + log.trace("PDF Export completed"); + } + if (GlobalOptions.getOutIMG() != null) { + FilePNG.drawCharts(ks.graphtree, ks); + log.trace("IMG Export completed"); + } + + } } diff --git a/src/main/java/net/atomique/ksar/export/FilePNG.java b/src/main/java/net/atomique/ksar/export/FilePNG.java index a9a20eb6..817015de 100644 --- a/src/main/java/net/atomique/ksar/export/FilePNG.java +++ b/src/main/java/net/atomique/ksar/export/FilePNG.java @@ -1,11 +1,7 @@ package net.atomique.ksar.export; -import java.io.File; -import java.io.IOException; - import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; - import net.atomique.ksar.GlobalOptions; import net.atomique.ksar.kSar; import net.atomique.ksar.graph.Graph; @@ -14,43 +10,46 @@ import net.atomique.ksar.ui.SortedTreeNode; import net.atomique.ksar.ui.TreeNodeInfo; +import java.io.File; +import java.io.IOException; + public class FilePNG { - public static int addchart(String path, Graph graph, kSar mysar) { - int pagewidth = GlobalOptions.getWidth(); - int pageheight = GlobalOptions.getHeigth(); - JFreeChart chart = graph.getgraph(mysar.myparser.get_startofgraph(), mysar.myparser.get_endofgraph()); - try { - ChartUtilities.saveChartAsPNG(new File(path), chart, pagewidth, pageheight); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + public static int addchart(String path, Graph graph, kSar mysar) { + int pagewidth = GlobalOptions.getWidth(); + int pageheight = GlobalOptions.getHeigth(); + JFreeChart chart = graph.getgraph(mysar.myparser.get_startofgraph(), mysar.myparser.get_endofgraph()); + try { + ChartUtilities.saveChartAsPNG(new File(path), chart, pagewidth, pageheight); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } - return 0; - } + return 0; + } - public static void drawCharts(SortedTreeNode node, kSar mysar) { - int num = node.getChildCount(); - if (num > 0) { - Object obj1 = node.getUserObject(); - if (obj1 instanceof ParentNodeInfo) { - ParentNodeInfo tmpnode = (ParentNodeInfo) obj1; - List nodeobj = tmpnode.getNode_object(); - } - for (int i = 0; i < num; i++) { - SortedTreeNode l = (SortedTreeNode) node.getChildAt(i); - drawCharts(l, mysar); - } - } else { - Object obj1 = node.getUserObject(); - if (obj1 instanceof TreeNodeInfo) { - TreeNodeInfo tmpnode = (TreeNodeInfo) obj1; - Graph nodeobj = tmpnode.getNode_object(); - if (nodeobj.printSelected) { - addchart(GlobalOptions.getOutIMG() + nodeobj.getTitle() + ".png", nodeobj, mysar); - } + public static void drawCharts(SortedTreeNode node, kSar mysar) { + int num = node.getChildCount(); + if (num > 0) { + Object obj1 = node.getUserObject(); + if (obj1 instanceof ParentNodeInfo) { + ParentNodeInfo tmpnode = (ParentNodeInfo) obj1; + List nodeobj = tmpnode.getNode_object(); + } + for (int i = 0; i < num; i++) { + SortedTreeNode l = (SortedTreeNode) node.getChildAt(i); + drawCharts(l, mysar); + } + } else { + Object obj1 = node.getUserObject(); + if (obj1 instanceof TreeNodeInfo) { + TreeNodeInfo tmpnode = (TreeNodeInfo) obj1; + Graph nodeobj = tmpnode.getNode_object(); + if (nodeobj.printSelected) { + addchart(GlobalOptions.getOutIMG() + nodeobj.getTitle() + ".png", nodeobj, mysar); + } - } - } - } + } + } + } } diff --git a/src/main/java/net/atomique/ksar/kSar.java b/src/main/java/net/atomique/ksar/kSar.java index 8bb42c64..1f265758 100644 --- a/src/main/java/net/atomique/ksar/kSar.java +++ b/src/main/java/net/atomique/ksar/kSar.java @@ -195,13 +195,13 @@ public void interrupt_parsing() { } } - public void add2tree(SortedTreeNode parent, SortedTreeNode newNode) { - if (dataview != null) { - dataview.add2tree(parent, newNode); - } else { - parent.insert(newNode, parent.getChildCount()); - } - } + public void add2tree(SortedTreeNode parent, SortedTreeNode newNode) { + if (dataview != null) { + dataview.add2tree(parent, newNode); + } else { + parent.insert(newNode, parent.getChildCount()); + } + } public int get_page_to_print() { page_to_print = 0; From cec36441837aa9cd2bf1328caa6d2951fda17671 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 May 2017 14:23:18 +0400 Subject: [PATCH 12/38] fix of format --- src/main/java/net/atomique/ksar/Main.java | 10 +++++----- src/main/java/net/atomique/ksar/export/FilePNG.java | 9 +++++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/atomique/ksar/Main.java b/src/main/java/net/atomique/ksar/Main.java index 5e5b375f..ea407094 100644 --- a/src/main/java/net/atomique/ksar/Main.java +++ b/src/main/java/net/atomique/ksar/Main.java @@ -12,8 +12,8 @@ import net.atomique.ksar.graph.List; import net.atomique.ksar.ui.ParentNodeInfo; import net.atomique.ksar.ui.SortedTreeNode; -import net.atomique.ksar.ui.TreeNodeInfo; import net.atomique.ksar.ui.Desktop; +import net.atomique.ksar.ui.TreeNodeInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -188,19 +188,19 @@ public static void main(String[] args) { } } - if (gui) + if (gui) { make_ui(); - else + } else { nongui(); + } } public static void exit_error(final String message) { log.error(message); System.exit(1); - } - + public static void validateTags(SortedTreeNode node) { int num = node.getChildCount(); if (num > 0) { diff --git a/src/main/java/net/atomique/ksar/export/FilePNG.java b/src/main/java/net/atomique/ksar/export/FilePNG.java index 817015de..bfaaa3ee 100644 --- a/src/main/java/net/atomique/ksar/export/FilePNG.java +++ b/src/main/java/net/atomique/ksar/export/FilePNG.java @@ -1,7 +1,10 @@ +/* + * Copyright 2017 The kSAR Project. All rights reserved. + * See the LICENSE file in the project root for more information. + */ + package net.atomique.ksar.export; -import org.jfree.chart.ChartUtilities; -import org.jfree.chart.JFreeChart; import net.atomique.ksar.GlobalOptions; import net.atomique.ksar.kSar; import net.atomique.ksar.graph.Graph; @@ -9,6 +12,8 @@ import net.atomique.ksar.ui.ParentNodeInfo; import net.atomique.ksar.ui.SortedTreeNode; import net.atomique.ksar.ui.TreeNodeInfo; +import org.jfree.chart.ChartUtilities; +import org.jfree.chart.JFreeChart; import java.io.File; import java.io.IOException; From 4004367d5cce749f3eebbe5f320ab06e0d9a153f Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 May 2017 14:26:14 +0400 Subject: [PATCH 13/38] fix of format --- src/main/java/net/atomique/ksar/Main.java | 2 +- src/main/java/net/atomique/ksar/export/FilePNG.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/atomique/ksar/Main.java b/src/main/java/net/atomique/ksar/Main.java index ea407094..98245caf 100644 --- a/src/main/java/net/atomique/ksar/Main.java +++ b/src/main/java/net/atomique/ksar/Main.java @@ -10,9 +10,9 @@ import net.atomique.ksar.export.FilePNG; import net.atomique.ksar.graph.Graph; import net.atomique.ksar.graph.List; +import net.atomique.ksar.ui.Desktop; import net.atomique.ksar.ui.ParentNodeInfo; import net.atomique.ksar.ui.SortedTreeNode; -import net.atomique.ksar.ui.Desktop; import net.atomique.ksar.ui.TreeNodeInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/net/atomique/ksar/export/FilePNG.java b/src/main/java/net/atomique/ksar/export/FilePNG.java index bfaaa3ee..ff773e19 100644 --- a/src/main/java/net/atomique/ksar/export/FilePNG.java +++ b/src/main/java/net/atomique/ksar/export/FilePNG.java @@ -6,9 +6,9 @@ package net.atomique.ksar.export; import net.atomique.ksar.GlobalOptions; -import net.atomique.ksar.kSar; import net.atomique.ksar.graph.Graph; import net.atomique.ksar.graph.List; +import net.atomique.ksar.kSar; import net.atomique.ksar.ui.ParentNodeInfo; import net.atomique.ksar.ui.SortedTreeNode; import net.atomique.ksar.ui.TreeNodeInfo; From c7e222472fb30fcdcec896a528a06592a46cd34e Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 May 2017 14:31:52 +0400 Subject: [PATCH 14/38] fix of format --- .../java/net/atomique/ksar/AllParser.java | 45 ++++++++++--------- .../java/net/atomique/ksar/parser/Linux.java | 34 +++++++------- 2 files changed, 40 insertions(+), 39 deletions(-) diff --git a/src/main/java/net/atomique/ksar/AllParser.java b/src/main/java/net/atomique/ksar/AllParser.java index f8e2d2f4..42c5ed69 100644 --- a/src/main/java/net/atomique/ksar/AllParser.java +++ b/src/main/java/net/atomique/ksar/AllParser.java @@ -21,19 +21,20 @@ public abstract class AllParser { private static final Logger log = LoggerFactory.getLogger(AllParser.class); - private static final Map DATE_FORMAT_REGEXPS = new HashMap() { - { - put("^\\d{8}$", "yyyyMMdd"); - put("^\\d{1,2}-\\d{1,2}-\\d{4}$", "dd-MM-yyyy"); - put("^\\d{4}-\\d{1,2}-\\d{1,2}$", "yyyy-MM-dd"); - put("^\\d{1,2}/\\d{1,2}/\\d{4}$", "MM/dd/yyyy"); - put("^\\d{4}/\\d{1,2}/\\d{1,2}$", "yyyy/MM/dd"); - put("^\\d{1,2}\\s[a-z]{3}\\s\\d{4}$", "dd MMM yyyy"); - put("^\\d{1,2}\\s[a-z]{4,}\\s\\d{4}$", "dd MMMM yyyy"); - put("^\\d{1,2}-\\d{1,2}-\\d{2}$", "dd-MM-yy"); - put("^\\d{1,2}/\\d{1,2}/\\d{2}$", "MM/dd/yy"); - } - }; + private static final Map DATE_FORMAT_REGEXPS = new HashMap() { + { + put("^\\d{8}$", "yyyyMMdd"); + put("^\\d{1,2}-\\d{1,2}-\\d{4}$", "dd-MM-yyyy"); + put("^\\d{4}-\\d{1,2}-\\d{1,2}$", "yyyy-MM-dd"); + put("^\\d{1,2}/\\d{1,2}/\\d{4}$", "MM/dd/yyyy"); + put("^\\d{4}/\\d{1,2}/\\d{1,2}$", "yyyy/MM/dd"); + put("^\\d{1,2}\\s[a-z]{3}\\s\\d{4}$", "dd MMM yyyy"); + put("^\\d{1,2}\\s[a-z]{4,}\\s\\d{4}$", "dd MMMM yyyy"); + put("^\\d{1,2}-\\d{1,2}-\\d{2}$", "dd-MM-yy"); + put("^\\d{1,2}/\\d{1,2}/\\d{2}$", "MM/dd/yy"); + } + }; + public AllParser() { } @@ -78,18 +79,18 @@ public boolean setDate(String s) { sarEndDate = s; } - try { - DateTimeFormatter formatter; - if ("".equals(dateFormat)) { - formatter = DateTimeFormatter.ofPattern(determineDateFormat(s)); + try { + DateTimeFormatter formatter; + if ("Automatic Detection".equals(dateFormat)) { + formatter = DateTimeFormatter.ofPattern(determineDateFormat(s)); - } else { - formatter = DateTimeFormatter.ofPattern(dateFormat); - } + } else { + formatter = DateTimeFormatter.ofPattern(dateFormat); + } - currentDate = LocalDate.parse(s, formatter); + currentDate = LocalDate.parse(s, formatter); - parsedate = currentDate; + parsedate = currentDate; startDate = LocalDate.parse(sarStartDate, formatter); endDate = LocalDate.parse(sarEndDate, formatter); diff --git a/src/main/java/net/atomique/ksar/parser/Linux.java b/src/main/java/net/atomique/ksar/parser/Linux.java index 3d796b87..19d6c91d 100644 --- a/src/main/java/net/atomique/ksar/parser/Linux.java +++ b/src/main/java/net/atomique/ksar/parser/Linux.java @@ -51,10 +51,10 @@ private void checkDateFormat() { if ("Always ask".equals(LinuxDateFormat)) { askDateFormat(); } - - if("Automatic Detection".equals(LinuxDateFormat)){ - dateFormat="Automatic Detection"; - timeColumn=0; + + if ("Automatic Detection".equals(LinuxDateFormat)) { + dateFormat = "Automatic Detection"; + timeColumn = 0; } // day and year format specifiers must be lower case, month upper case @@ -64,7 +64,7 @@ private void checkDateFormat() { dateFormat = dateFormat.replaceAll("D{2}", "dd"); dateFormat = dateFormat.replaceAll("Y{2}", "yy"); - //12hour + // 12hour if (parts.length == 3 && parts[2].contains("AM|PM")) { timeFormat = "hh:mm:ss a"; timeColumn = 2; @@ -100,18 +100,18 @@ public int parse(String line, String[] columns) { return 0; } - try { - if (timeColumn == 0) { - if ((columns[0] + " " + columns[1]).matches("^\\d\\d:\\d\\d:\\d\\d [AP]M$")) { - timeFormat = "hh:mm:ss a"; - timeColumn = 2; - } else { - timeColumn = 1; - } - } - - if (timeColumn == 2) { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern(timeFormat, Locale.US); + try { + if (timeColumn == 0) { + if ((columns[0] + " " + columns[1]).matches("^\\d\\d:\\d\\d:\\d\\d [AP]M$")) { + timeFormat = "hh:mm:ss a"; + timeColumn = 2; + } else { + timeColumn = 1; + } + } + + if (timeColumn == 2) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(timeFormat, Locale.US); parsetime = LocalTime.parse(columns[0] + " " + columns[1], formatter); } else { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(timeFormat); From 9190a052e312e850b9f542783c0b28f67974d226 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 May 2017 14:35:55 +0400 Subject: [PATCH 15/38] fix of format --- .../java/net/atomique/ksar/AllParser.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/atomique/ksar/AllParser.java b/src/main/java/net/atomique/ksar/AllParser.java index 42c5ed69..85fc72db 100644 --- a/src/main/java/net/atomique/ksar/AllParser.java +++ b/src/main/java/net/atomique/ksar/AllParser.java @@ -92,8 +92,8 @@ public boolean setDate(String s) { parsedate = currentDate; - startDate = LocalDate.parse(sarStartDate, formatter); - endDate = LocalDate.parse(sarEndDate, formatter); + startDate = LocalDate.parse(sarStartDate, formatter); + endDate = LocalDate.parse(sarEndDate, formatter); } catch (DateTimeParseException ex) { log.error("unable to parse date {}", s, ex); @@ -125,14 +125,14 @@ public String getCurrentStat() { return currentStat; } - public static String determineDateFormat(String dateString) { - for (String regexp : DATE_FORMAT_REGEXPS.keySet()) { - if (dateString.toLowerCase().matches(regexp)) { - return DATE_FORMAT_REGEXPS.get(regexp); - } - } - return null; // Unknown format. - } + public static String determineDateFormat(String dateString) { + for (String regexp : DATE_FORMAT_REGEXPS.keySet()) { + if (dateString.toLowerCase().matches(regexp)) { + return DATE_FORMAT_REGEXPS.get(regexp); + } + } + return null; // Unknown format. + } protected String sarStartDate = null; protected String sarEndDate = null; From 687eefbf8732fa1ace97e897e25329e137a206f5 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 18 May 2017 14:14:54 +0400 Subject: [PATCH 16/38] fix of missing else clause --- .../java/net/atomique/ksar/parser/Linux.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/atomique/ksar/parser/Linux.java b/src/main/java/net/atomique/ksar/parser/Linux.java index 19d6c91d..bf74e2d9 100644 --- a/src/main/java/net/atomique/ksar/parser/Linux.java +++ b/src/main/java/net/atomique/ksar/parser/Linux.java @@ -55,19 +55,20 @@ private void checkDateFormat() { if ("Automatic Detection".equals(LinuxDateFormat)) { dateFormat = "Automatic Detection"; timeColumn = 0; - } + } else { - // day and year format specifiers must be lower case, month upper case - String[] parts = LinuxDateFormat.split(" ", 3); + // day and year format specifiers must be lower case, month upper case + String[] parts = LinuxDateFormat.split(" ", 3); - dateFormat = parts[0]; - dateFormat = dateFormat.replaceAll("D{2}", "dd"); - dateFormat = dateFormat.replaceAll("Y{2}", "yy"); + dateFormat = parts[0]; + dateFormat = dateFormat.replaceAll("D{2}", "dd"); + dateFormat = dateFormat.replaceAll("Y{2}", "yy"); - // 12hour - if (parts.length == 3 && parts[2].contains("AM|PM")) { - timeFormat = "hh:mm:ss a"; - timeColumn = 2; + // 12hour + if (parts.length == 3 && parts[2].contains("AM|PM")) { + timeFormat = "hh:mm:ss a"; + timeColumn = 2; + } } } From 34c68c2416ef2f0724d44a8afa6f2d9abcebfe80 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 18 May 2017 15:34:38 +0400 Subject: [PATCH 17/38] unittests --- .../atomique/ksar/parser/LinuxHeaderTest.java | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java diff --git a/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java b/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java new file mode 100644 index 00000000..bcb0e803 --- /dev/null +++ b/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java @@ -0,0 +1,91 @@ +package net.atomique.ksar.parser; + +import static org.junit.Assert.*; + +import java.text.DecimalFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Arrays; +import java.util.Collection; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameters; + +import net.atomique.ksar.Config; +import net.atomique.ksar.kSar; +import net.atomique.ksar.graph.ISNumber; + +@RunWith(Parameterized.class) +public class LinuxHeaderTest { + private String datetimeformat; + private String header; + private String sarString; + private LocalDateTime expectedDate; + private Linux sut; + + + public LinuxHeaderTest(String header, String sarString, LocalDateTime expectedDate) { + this.header = header; + this.sarString = sarString; + this.expectedDate = expectedDate; + } + + @Before + public void setUp() throws Exception { + datetimeformat = "Automatic Detection"; + Config.setLinuxDateFormat(datetimeformat); + sut = new Linux(); + } + + + @Test + public void test() { + String [] columns = sarString.split("\\s+"); + kSar ksar = new kSar(); + sut.init(ksar, header); + sut.parse(sarString, columns); + assertEquals(expectedDate, sut.get_startofgraph()); + } + + + @Parameters + public static Collection testValues() { + + // current Byte, expected value, expected unit, test name + String str = "2016-03-28 09:10:01"; + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime dateTime = LocalDateTime.parse(str, formatter); + + + return Arrays.asList(new Object[][] { + { "Linux 3.10.0-327.el7.x86_64 (hostname.example.com) 03/28/16 _x86_64_ (48 CPU)", + "09:10:01 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", + dateTime }, + { "Linux 3.10.0-327.el7.x86_64 (hostname.example.com) 03/28/2016 _x86_64_ (48 CPU)", + "09:10:01 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", + dateTime }, + { "Linux 3.10.0-327.el7.x86_64 (hostname.example.com) 20160328 _x86_64_ (48 CPU)", + "09:10:01 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", + dateTime }, + { "Linux 3.10.0-327.el7.x86_64 (hostname.example.com) 2016-03-28 _x86_64_ (48 CPU)", + "09:10:01 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", + dateTime }, + { "Linux 3.10.0-327.el7.x86_64 (hostname.example.com) 03/28/16 _x86_64_ (48 CPU)", + "09:10:01 AM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", + dateTime }, + { "Linux 3.10.0-327.el7.x86_64 (hostname.example.com) 03/28/2016 _x86_64_ (48 CPU)", + "09:10:01 AM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", + dateTime }, + { "Linux 3.10.0-327.el7.x86_64 (hostname.example.com) 20160328 _x86_64_ (48 CPU)", + "09:10:01 AM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", + dateTime }, + { "Linux 3.10.0-327.el7.x86_64 (hostname.example.com) 2016-03-28 _x86_64_ (48 CPU)", + "09:10:01 AM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", + dateTime },}); + } + + +} From 1b6aae315c45a6211f09245b8722296526f3e20e Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 18 May 2017 15:40:53 +0400 Subject: [PATCH 18/38] style fixes --- .../atomique/ksar/parser/LinuxHeaderTest.java | 50 ++++++++----------- 1 file changed, 21 insertions(+), 29 deletions(-) diff --git a/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java b/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java index bcb0e803..91134af8 100644 --- a/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java +++ b/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java @@ -2,21 +2,18 @@ import static org.junit.Assert.*; -import java.text.DecimalFormat; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.Arrays; -import java.util.Collection; - +import net.atomique.ksar.Config; +import net.atomique.ksar.kSar; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; -import net.atomique.ksar.Config; -import net.atomique.ksar.kSar; -import net.atomique.ksar.graph.ISNumber; +import java.util.Arrays; +import java.util.Collection; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; @RunWith(Parameterized.class) public class LinuxHeaderTest { @@ -26,7 +23,6 @@ public class LinuxHeaderTest { private LocalDateTime expectedDate; private Linux sut; - public LinuxHeaderTest(String header, String sarString, LocalDateTime expectedDate) { this.header = header; this.sarString = sarString; @@ -39,18 +35,16 @@ public void setUp() throws Exception { Config.setLinuxDateFormat(datetimeformat); sut = new Linux(); } - - + @Test public void test() { - String [] columns = sarString.split("\\s+"); + String[] columns = sarString.split("\\s+"); kSar ksar = new kSar(); sut.init(ksar, header); sut.parse(sarString, columns); assertEquals(expectedDate, sut.get_startofgraph()); } - - + @Parameters public static Collection testValues() { @@ -58,8 +52,7 @@ public static Collection testValues() { String str = "2016-03-28 09:10:01"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime dateTime = LocalDateTime.parse(str, formatter); - - + return Arrays.asList(new Object[][] { { "Linux 3.10.0-327.el7.x86_64 (hostname.example.com) 03/28/16 _x86_64_ (48 CPU)", "09:10:01 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", @@ -74,18 +67,17 @@ public static Collection testValues() { "09:10:01 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", dateTime }, { "Linux 3.10.0-327.el7.x86_64 (hostname.example.com) 03/28/16 _x86_64_ (48 CPU)", - "09:10:01 AM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", - dateTime }, - { "Linux 3.10.0-327.el7.x86_64 (hostname.example.com) 03/28/2016 _x86_64_ (48 CPU)", - "09:10:01 AM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", - dateTime }, - { "Linux 3.10.0-327.el7.x86_64 (hostname.example.com) 20160328 _x86_64_ (48 CPU)", - "09:10:01 AM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", - dateTime }, - { "Linux 3.10.0-327.el7.x86_64 (hostname.example.com) 2016-03-28 _x86_64_ (48 CPU)", - "09:10:01 AM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", - dateTime },}); + "09:10:01 AM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", + dateTime }, + { "Linux 3.10.0-327.el7.x86_64 (hostname.example.com) 03/28/2016 _x86_64_ (48 CPU)", + "09:10:01 AM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", + dateTime }, + { "Linux 3.10.0-327.el7.x86_64 (hostname.example.com) 20160328 _x86_64_ (48 CPU)", + "09:10:01 AM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", + dateTime }, + { "Linux 3.10.0-327.el7.x86_64 (hostname.example.com) 2016-03-28 _x86_64_ (48 CPU)", + "09:10:01 AM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00", + dateTime }, }); } - } From 8a602f4e8a8ad2da48699723ff293a3892f556c5 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 18 May 2017 15:44:17 +0400 Subject: [PATCH 19/38] style fixes --- .../net/atomique/ksar/parser/LinuxHeaderTest.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java b/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java index 91134af8..3cd0183f 100644 --- a/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java +++ b/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java @@ -1,6 +1,10 @@ +/* + * Copyright 2018 The kSAR Project. All rights reserved. + * See the LICENSE file in the project root for more information. + */ + package net.atomique.ksar.parser; -import static org.junit.Assert.*; import net.atomique.ksar.Config; import net.atomique.ksar.kSar; @@ -9,11 +13,13 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; +import static org.junit.Assert.assertEquals; + +import java.time.format.DateTimeFormatter; +import java.time.LocalDateTime; import java.util.Arrays; import java.util.Collection; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; @RunWith(Parameterized.class) public class LinuxHeaderTest { From 7f93028935ad3c8d656f6ae2309f17da57b43e7f Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 18 May 2017 15:47:37 +0400 Subject: [PATCH 20/38] style fixes --- .../java/net/atomique/ksar/parser/LinuxHeaderTest.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java b/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java index 3cd0183f..a1d6edac 100644 --- a/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java +++ b/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java @@ -5,7 +5,6 @@ package net.atomique.ksar.parser; - import net.atomique.ksar.Config; import net.atomique.ksar.kSar; import org.junit.Before; @@ -13,14 +12,14 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; -import static org.junit.Assert.assertEquals; - -import java.time.format.DateTimeFormatter; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.Collection; +import static org.junit.Assert.assertEquals; + @RunWith(Parameterized.class) public class LinuxHeaderTest { private String datetimeformat; From 4e91c9831c0c109066f989a5686473e0cf7ec05d Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 18 May 2017 15:50:29 +0400 Subject: [PATCH 21/38] style fixes --- src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java b/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java index a1d6edac..a717957e 100644 --- a/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java +++ b/src/test/java/net/atomique/ksar/parser/LinuxHeaderTest.java @@ -5,6 +5,9 @@ package net.atomique.ksar.parser; + +import static org.junit.Assert.assertEquals; + import net.atomique.ksar.Config; import net.atomique.ksar.kSar; import org.junit.Before; @@ -18,8 +21,6 @@ import java.util.Arrays; import java.util.Collection; -import static org.junit.Assert.assertEquals; - @RunWith(Parameterized.class) public class LinuxHeaderTest { private String datetimeformat; From 012e82412a62ae699e04fc2a95771e0ce0e9fc58 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 18 May 2017 16:03:14 +0400 Subject: [PATCH 22/38] add format selection in console mode --- src/main/java/net/atomique/ksar/Main.java | 11 +++++++++++ src/main/java/net/atomique/ksar/parser/Linux.java | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/src/main/java/net/atomique/ksar/Main.java b/src/main/java/net/atomique/ksar/Main.java index 98245caf..6a1b33ed 100644 --- a/src/main/java/net/atomique/ksar/Main.java +++ b/src/main/java/net/atomique/ksar/Main.java @@ -178,6 +178,17 @@ public static void main(String[] args) { } continue; } + + if ("-dateFormat".equals(arg)) { + // This will be CSV file to export by deafault + if (i < args.length) { + Config.setLinuxDateFormat(args[i++]); + Config.save(); + } else { + exit_error(resource.getString("INPUT_REQUIRE_ARG")); + } + continue; + } if ("-n".equals(arg)) { // This means nongui mode (same as in jmeter) diff --git a/src/main/java/net/atomique/ksar/parser/Linux.java b/src/main/java/net/atomique/ksar/parser/Linux.java index cf9b1384..7cfd2e41 100644 --- a/src/main/java/net/atomique/ksar/parser/Linux.java +++ b/src/main/java/net/atomique/ksar/parser/Linux.java @@ -80,6 +80,11 @@ private void askDateFormat() { Config.save(); } } + } else { + Config.setLinuxDateFormat("MM/DD/YYYY 23:59:59"); + log.error("Unable to ask format in nonGui mode. Switching to default value: {}", Config.getLinuxDateFormat()); + // TODO replace it with autodetection after merge. This will be default to + // avoid crashes } } From 0d33144c6126738f9f2b9efba089ba759d23a363 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 18 May 2017 16:06:59 +0400 Subject: [PATCH 23/38] add format selection in console mode --- src/main/java/net/atomique/ksar/Main.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/atomique/ksar/Main.java b/src/main/java/net/atomique/ksar/Main.java index 6a1b33ed..5e845582 100644 --- a/src/main/java/net/atomique/ksar/Main.java +++ b/src/main/java/net/atomique/ksar/Main.java @@ -40,6 +40,7 @@ public static void usage() { log.info("-width : width for output png charts\n"); log.info("-heigth : heigth for output png charts"); log.info("-tags : comma separated list of nodes for export. ex: 'CPU all,Load'"); + log.info("-dateFormat : date time format. Example: MM/DD/YYYY 23:59:59"); System.exit(0); } @@ -178,7 +179,7 @@ public static void main(String[] args) { } continue; } - + if ("-dateFormat".equals(arg)) { // This will be CSV file to export by deafault if (i < args.length) { From 5919c80dd77e5ccc711f6e1b0fd632ffeb6c7709 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 8 Jul 2017 01:41:11 +0400 Subject: [PATCH 24/38] add unittests --- .../java/net/atomique/ksar/AllParser.java | 2 +- src/main/java/net/atomique/ksar/Main.java | 8 +- .../net/atomique/ksar/export/FilePNG.java | 3 +- src/main/java/net/atomique/ksar/kSar.version | 1 + .../java/net/atomique/ksar/parser/Linux.java | 17 ++- .../net/atomique/ksar/ConsoleModeTest.java | 101 ++++++++++++++++++ 6 files changed, 119 insertions(+), 13 deletions(-) create mode 100644 src/main/java/net/atomique/ksar/kSar.version create mode 100644 src/test/java/net/atomique/ksar/ConsoleModeTest.java diff --git a/src/main/java/net/atomique/ksar/AllParser.java b/src/main/java/net/atomique/ksar/AllParser.java index f6020228..3a42eb43 100644 --- a/src/main/java/net/atomique/ksar/AllParser.java +++ b/src/main/java/net/atomique/ksar/AllParser.java @@ -65,6 +65,7 @@ public boolean setDate(String s) { } try { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat); currentDate = LocalDate.parse(s, formatter); @@ -103,7 +104,6 @@ public String getCurrentStat() { return currentStat; } - protected String sarStartDate = null; protected String sarEndDate = null; diff --git a/src/main/java/net/atomique/ksar/Main.java b/src/main/java/net/atomique/ksar/Main.java index 5e845582..6003837e 100644 --- a/src/main/java/net/atomique/ksar/Main.java +++ b/src/main/java/net/atomique/ksar/Main.java @@ -53,7 +53,8 @@ private static void set_lookandfeel() { if (Config.getLandf().equals(laf.getName())) { try { UIManager.setLookAndFeel(laf.getClassName()); - } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException + | UnsupportedLookAndFeelException ex) { log.error("lookandfeel Exception", ex); } } @@ -242,7 +243,10 @@ public static void validateTags(SortedTreeNode node) { public static void nongui() { kSar ks = new kSar(); - + if (GlobalOptions.getCLfilename() == null) { + exit_error("No any input file path specified"); + } + System.out.println("running nongui with " + GlobalOptions.getCLfilename()); ks.do_fileread(GlobalOptions.getCLfilename()); while (ks.launched_action.isAlive()) { try { diff --git a/src/main/java/net/atomique/ksar/export/FilePNG.java b/src/main/java/net/atomique/ksar/export/FilePNG.java index ff773e19..b3143223 100644 --- a/src/main/java/net/atomique/ksar/export/FilePNG.java +++ b/src/main/java/net/atomique/ksar/export/FilePNG.java @@ -51,7 +51,8 @@ public static void drawCharts(SortedTreeNode node, kSar mysar) { TreeNodeInfo tmpnode = (TreeNodeInfo) obj1; Graph nodeobj = tmpnode.getNode_object(); if (nodeobj.printSelected) { - addchart(GlobalOptions.getOutIMG() + nodeobj.getTitle() + ".png", nodeobj, mysar); + String name = nodeobj.getTitle().replace('/', '-'); + addchart(GlobalOptions.getOutIMG() + name + ".png", nodeobj, mysar); } } diff --git a/src/main/java/net/atomique/ksar/kSar.version b/src/main/java/net/atomique/ksar/kSar.version new file mode 100644 index 00000000..a7b56e36 --- /dev/null +++ b/src/main/java/net/atomique/ksar/kSar.version @@ -0,0 +1 @@ +12.1.2 \ No newline at end of file diff --git a/src/main/java/net/atomique/ksar/parser/Linux.java b/src/main/java/net/atomique/ksar/parser/Linux.java index 7cfd2e41..216adb7a 100644 --- a/src/main/java/net/atomique/ksar/parser/Linux.java +++ b/src/main/java/net/atomique/ksar/parser/Linux.java @@ -28,8 +28,7 @@ public class Linux extends OSParser { private static final Logger log = LoggerFactory.getLogger(Linux.class); private String LinuxDateFormat; - private final HashSet IgnoreLinesBeginningWith = new HashSet<>(Arrays.asList( - "Average:", "##", "Summary")); + private final HashSet IgnoreLinesBeginningWith = new HashSet<>(Arrays.asList("Average:", "##", "Summary")); public void parse_header(String s) { @@ -59,7 +58,7 @@ private void checkDateFormat() { dateFormat = dateFormat.replaceAll("D{2}", "dd"); dateFormat = dateFormat.replaceAll("Y{2}", "yy"); - //12hour + // 12hour if (parts.length == 3 && parts[2].contains("AM|PM")) { timeFormat = "hh:mm:ss a"; timeColumn = 2; @@ -81,7 +80,8 @@ private void askDateFormat() { } } } else { - Config.setLinuxDateFormat("MM/DD/YYYY 23:59:59"); + Config.setLinuxDateFormat("MM/DD/YY 23:59:59"); + LinuxDateFormat = "MM/DD/YY 23:59:59"; log.error("Unable to ask format in nonGui mode. Switching to default value: {}", Config.getLinuxDateFormat()); // TODO replace it with autodetection after merge. This will be default to // avoid crashes @@ -132,8 +132,8 @@ public int parse(String line, String[] columns) { return -1; } - - //00:20:01 CPU i000/s i001/s i002/s i008/s i009/s i010/s i011/s i012/s i014/s + // 00:20:01 CPU i000/s i001/s i002/s i008/s i009/s i010/s i011/s i012/s + // i014/s if ("CPU".equals(columns[firstdatacolumn]) && line.matches(".*i([0-9]+)/s.*")) { currentStat = "IGNORE"; return 1; @@ -146,8 +146,7 @@ public int parse(String line, String[] columns) { GraphConfig mygraphinfo = myosconfig.getGraphConfig(checkStat); if (mygraphinfo != null) { if ("unique".equals(mygraphinfo.getType())) { - obj = new Graph(mysar, mygraphinfo, mygraphinfo.getTitle(), line, firstdatacolumn, - mysar.graphtree); + obj = new Graph(mysar, mygraphinfo, mygraphinfo.getTitle(), line, firstdatacolumn, mysar.graphtree); ListofGraph.put(checkStat, obj); currentStat = checkStat; @@ -171,7 +170,7 @@ public int parse(String line, String[] columns) { } } - //log.trace("{} {}", currentStat, line); + // log.trace("{} {}", currentStat, line); if (lastStat != null) { if (!lastStat.equals(currentStat)) { diff --git a/src/test/java/net/atomique/ksar/ConsoleModeTest.java b/src/test/java/net/atomique/ksar/ConsoleModeTest.java new file mode 100644 index 00000000..7bbf8c41 --- /dev/null +++ b/src/test/java/net/atomique/ksar/ConsoleModeTest.java @@ -0,0 +1,101 @@ +/* + * Copyright 2018 The kSAR Project. All rights reserved. + * See the LICENSE file in the project root for more information. + */ + +package net.atomique.ksar; + +import static org.junit.Assert.assertEquals; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class ConsoleModeTest { + + private String inputfile; + private String outPDF; + private String outIMG; + private String outCSV; + private String outFileCheck; + + private kSar sut; + + public ConsoleModeTest(String inputfile, String outPDF, String outIMG, String outCSV, String outFileCheck) { + this.inputfile = inputfile; + this.outPDF = outPDF; + this.outIMG = outIMG; + this.outCSV = outCSV; + this.outFileCheck = outFileCheck; + } + + @Before + public void setUp() throws Exception { + + } + + @Test + public void testConsole() { + File f = new File(outFileCheck); + f.delete(); + + List ars = new ArrayList(); + + ars.add("-n"); + ars.add("-h"); + ars.add("-input"); + ars.add(inputfile); + + if (!outPDF.equals("")) { + ars.add("-outputPDF"); + ars.add(outPDF); + } + + if (!outCSV.equals("")) { + ars.add("-outputCSV"); + ars.add(outCSV); + } + + if (!outIMG.equals("")) { + ars.add("-outputIMG"); + ars.add(outIMG); + } + + String[] args = new String[ars.size()]; + args = ars.toArray(args); + + // System.out.println(inputfile); + Main.main(args); + assertEquals(true, f.exists()); + f.delete(); + } + + @Parameterized.Parameters + public static Collection testValues() { + + // current Byte, expected value, expected unit, test name + return Arrays.asList(new Object[][] { + { "src/test/resources/sar-10.1.5", "", "", "build/tmp/output_junit.csv", "build/tmp/output_junit.csv" }, + { "src/test/resources/sar-10.1.5", "", "build/tmp/output_junit_IMG_", "", + "build/tmp/output_junit_IMG_CPU all.png" }, + { "src/test/resources/sar-10.1.5", "build/tmp/output_junit.pdf", "", "", "build/tmp/output_junit.pdf" }// input + // file; + // outpdf; + // outimg; + // outcsv + }); + } +} + +/* + * Copyright 2018 The kSAR Project. All rights reserved. See the LICENSE file in + * the project root for more information. + */ From 88695a062541a677a4b43fd6bd3cc0984b19b6fa Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 8 Jul 2017 01:46:42 +0400 Subject: [PATCH 25/38] add unittests --- .../net/atomique/ksar/ConsoleModeTest.java | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/test/java/net/atomique/ksar/ConsoleModeTest.java b/src/test/java/net/atomique/ksar/ConsoleModeTest.java index 7bbf8c41..dd817d6a 100644 --- a/src/test/java/net/atomique/ksar/ConsoleModeTest.java +++ b/src/test/java/net/atomique/ksar/ConsoleModeTest.java @@ -7,17 +7,17 @@ import static org.junit.Assert.assertEquals; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - @RunWith(Parameterized.class) public class ConsoleModeTest { @@ -84,13 +84,8 @@ public static Collection testValues() { // current Byte, expected value, expected unit, test name return Arrays.asList(new Object[][] { { "src/test/resources/sar-10.1.5", "", "", "build/tmp/output_junit.csv", "build/tmp/output_junit.csv" }, - { "src/test/resources/sar-10.1.5", "", "build/tmp/output_junit_IMG_", "", - "build/tmp/output_junit_IMG_CPU all.png" }, - { "src/test/resources/sar-10.1.5", "build/tmp/output_junit.pdf", "", "", "build/tmp/output_junit.pdf" }// input - // file; - // outpdf; - // outimg; - // outcsv + { "src/test/resources/sar-10.1.5", "", "build/tmp/output_junit_IMG_", "","build/tmp/output_junit_IMG_CPU all.png" }, + { "src/test/resources/sar-10.1.5", "build/tmp/output_junit.pdf", "", "", "build/tmp/output_junit.pdf" }// input // outcsv }); } } From 09cfa0d712a4a88d07463657aa981fdb6c33cdd8 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 8 Jul 2017 02:48:24 +0400 Subject: [PATCH 26/38] format --- .../java/net/atomique/ksar/AllParser.java | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/atomique/ksar/AllParser.java b/src/main/java/net/atomique/ksar/AllParser.java index 3a42eb43..811ed261 100644 --- a/src/main/java/net/atomique/ksar/AllParser.java +++ b/src/main/java/net/atomique/ksar/AllParser.java @@ -14,11 +14,26 @@ import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; +import java.util.HashMap; +import java.util.Map; import java.util.TreeSet; public abstract class AllParser { private static final Logger log = LoggerFactory.getLogger(AllParser.class); + private static final Map DATE_FORMAT_REGEXPS = new HashMap() { + { + put("^\\d{8}$", "yyyyMMdd"); + put("^\\d{1,2}-\\d{1,2}-\\d{4}$", "dd-MM-yyyy"); + put("^\\d{4}-\\d{1,2}-\\d{1,2}$", "yyyy-MM-dd"); + put("^\\d{1,2}/\\d{1,2}/\\d{4}$", "MM/dd/yyyy"); + put("^\\d{4}/\\d{1,2}/\\d{1,2}$", "yyyy/MM/dd"); + put("^\\d{1,2}\\s[a-z]{3}\\s\\d{4}$", "dd MMM yyyy"); + put("^\\d{1,2}\\s[a-z]{4,}\\s\\d{4}$", "dd MMMM yyyy"); + put("^\\d{1,2}-\\d{1,2}-\\d{2}$", "dd-MM-yy"); + put("^\\d{1,2}/\\d{1,2}/\\d{2}$", "MM/dd/yy"); + } + }; public AllParser() { @@ -65,8 +80,13 @@ public boolean setDate(String s) { } try { + DateTimeFormatter formatter; + if ("Automatic Detection".equals(dateFormat)) { + formatter = DateTimeFormatter.ofPattern(determineDateFormat(s)); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat); + } else { + formatter = DateTimeFormatter.ofPattern(dateFormat); + } currentDate = LocalDate.parse(s, formatter); parsedate = currentDate; @@ -104,6 +124,15 @@ public String getCurrentStat() { return currentStat; } + public static String determineDateFormat(String dateString) { + for (String regexp : DATE_FORMAT_REGEXPS.keySet()) { + if (dateString.toLowerCase().matches(regexp)) { + return DATE_FORMAT_REGEXPS.get(regexp); + } + } + return null; // Unknown format. + } + protected String sarStartDate = null; protected String sarEndDate = null; @@ -129,4 +158,4 @@ public String getCurrentStat() { protected String dateFormat = "MM/dd/yy"; protected String timeFormat = "HH:mm:ss"; protected int timeColumn = 1; -} +} \ No newline at end of file From 9e19416afbaca92b809cc31f50175fc0d7ca35ac Mon Sep 17 00:00:00 2001 From: elkrieg Date: Sat, 8 Jul 2017 03:00:21 +0400 Subject: [PATCH 27/38] Update AllParser.java --- src/main/java/net/atomique/ksar/AllParser.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/atomique/ksar/AllParser.java b/src/main/java/net/atomique/ksar/AllParser.java index aed509ff..336da108 100644 --- a/src/main/java/net/atomique/ksar/AllParser.java +++ b/src/main/java/net/atomique/ksar/AllParser.java @@ -132,6 +132,7 @@ public static String determineDateFormat(String dateString) { } return null; // Unknown format. } + protected String sarStartDate = null; protected String sarEndDate = null; From a1caf271205def70b86de6bc47ad2eb8d3ba15b5 Mon Sep 17 00:00:00 2001 From: elkrieg Date: Sat, 8 Jul 2017 03:02:33 +0400 Subject: [PATCH 28/38] Update AllParser.java --- src/main/java/net/atomique/ksar/AllParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/atomique/ksar/AllParser.java b/src/main/java/net/atomique/ksar/AllParser.java index 336da108..5d4585fd 100644 --- a/src/main/java/net/atomique/ksar/AllParser.java +++ b/src/main/java/net/atomique/ksar/AllParser.java @@ -132,7 +132,7 @@ public static String determineDateFormat(String dateString) { } return null; // Unknown format. } - + protected String sarStartDate = null; protected String sarEndDate = null; From 546fd1738062f1b3247666a8d872a5784b63f9a2 Mon Sep 17 00:00:00 2001 From: elkrieg Date: Sat, 8 Jul 2017 03:05:58 +0400 Subject: [PATCH 29/38] Update AllParser.java --- .../java/net/atomique/ksar/AllParser.java | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/atomique/ksar/AllParser.java b/src/main/java/net/atomique/ksar/AllParser.java index 5d4585fd..396a5fef 100644 --- a/src/main/java/net/atomique/ksar/AllParser.java +++ b/src/main/java/net/atomique/ksar/AllParser.java @@ -20,6 +20,32 @@ public abstract class AllParser { + protected String sarStartDate = null; + protected String sarEndDate = null; + + protected LocalDateTime startofgraph = null; + protected LocalDateTime endofgraph = null; + protected TreeSet DateSamples = new TreeSet(); + protected int firstdatacolumn = 0; + + abstract public String getInfo(); + + abstract public void parse_header(String s); + + abstract public void updateUITitle(); + + protected kSar mysar = null; + protected OSConfig myosconfig = null; + protected String ParserName = null; + + protected LocalTime parsetime = null; + protected LocalDate parsedate = null; + + protected String currentStat = "NONE"; + protected String dateFormat = "MM/dd/yy"; + protected String timeFormat = "HH:mm:ss"; + protected int timeColumn = 1; + private static final Logger log = LoggerFactory.getLogger(AllParser.class); private static final Map DATE_FORMAT_REGEXPS = new HashMap() { { @@ -132,30 +158,4 @@ public static String determineDateFormat(String dateString) { } return null; // Unknown format. } - - protected String sarStartDate = null; - protected String sarEndDate = null; - - protected LocalDateTime startofgraph = null; - protected LocalDateTime endofgraph = null; - protected TreeSet DateSamples = new TreeSet(); - protected int firstdatacolumn = 0; - - abstract public String getInfo(); - - abstract public void parse_header(String s); - - abstract public void updateUITitle(); - - protected kSar mysar = null; - protected OSConfig myosconfig = null; - protected String ParserName = null; - - protected LocalTime parsetime = null; - protected LocalDate parsedate = null; - - protected String currentStat = "NONE"; - protected String dateFormat = "MM/dd/yy"; - protected String timeFormat = "HH:mm:ss"; - protected int timeColumn = 1; } From b06910055dec2b865ee936ffc43e235be3ef1228 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 19 Jul 2017 17:14:34 +0400 Subject: [PATCH 30/38] 123 --- .../java/net/atomique/ksar/AllParser.java | 53 ++++++++++--------- src/main/resources/kSar.version | 1 + 2 files changed, 28 insertions(+), 26 deletions(-) create mode 100644 src/main/resources/kSar.version diff --git a/src/main/java/net/atomique/ksar/AllParser.java b/src/main/java/net/atomique/ksar/AllParser.java index 73fbff5b..396a5fef 100644 --- a/src/main/java/net/atomique/ksar/AllParser.java +++ b/src/main/java/net/atomique/ksar/AllParser.java @@ -20,6 +20,32 @@ public abstract class AllParser { + protected String sarStartDate = null; + protected String sarEndDate = null; + + protected LocalDateTime startofgraph = null; + protected LocalDateTime endofgraph = null; + protected TreeSet DateSamples = new TreeSet(); + protected int firstdatacolumn = 0; + + abstract public String getInfo(); + + abstract public void parse_header(String s); + + abstract public void updateUITitle(); + + protected kSar mysar = null; + protected OSConfig myosconfig = null; + protected String ParserName = null; + + protected LocalTime parsetime = null; + protected LocalDate parsedate = null; + + protected String currentStat = "NONE"; + protected String dateFormat = "MM/dd/yy"; + protected String timeFormat = "HH:mm:ss"; + protected int timeColumn = 1; + private static final Logger log = LoggerFactory.getLogger(AllParser.class); private static final Map DATE_FORMAT_REGEXPS = new HashMap() { { @@ -132,29 +158,4 @@ public static String determineDateFormat(String dateString) { } return null; // Unknown format. } - protected String sarStartDate = null; - protected String sarEndDate = null; - - protected LocalDateTime startofgraph = null; - protected LocalDateTime endofgraph = null; - protected TreeSet DateSamples = new TreeSet(); - protected int firstdatacolumn = 0; - - abstract public String getInfo(); - - abstract public void parse_header(String s); - - abstract public void updateUITitle(); - - protected kSar mysar = null; - protected OSConfig myosconfig = null; - protected String ParserName = null; - - protected LocalTime parsetime = null; - protected LocalDate parsedate = null; - - protected String currentStat = "NONE"; - protected String dateFormat = "MM/dd/yy"; - protected String timeFormat = "HH:mm:ss"; - protected int timeColumn = 1; -} \ No newline at end of file +} diff --git a/src/main/resources/kSar.version b/src/main/resources/kSar.version new file mode 100644 index 00000000..a7b56e36 --- /dev/null +++ b/src/main/resources/kSar.version @@ -0,0 +1 @@ +12.1.2 \ No newline at end of file From 028506bf046c1bfc21692ae5f21611345a5fd291 Mon Sep 17 00:00:00 2001 From: elkrieg Date: Mon, 7 Aug 2017 13:00:54 +0400 Subject: [PATCH 31/38] return version to usage --- src/main/java/net/atomique/ksar/Main.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/atomique/ksar/Main.java b/src/main/java/net/atomique/ksar/Main.java index 6003837e..a0385847 100644 --- a/src/main/java/net/atomique/ksar/Main.java +++ b/src/main/java/net/atomique/ksar/Main.java @@ -32,6 +32,7 @@ public class Main { static ResourceBundle resource = ResourceBundle.getBundle("net/atomique/ksar/Language/Message"); public static void usage() { + show_version(); log.info("-input : input sar statistics file \n"); log.info("-n : toggles nongui mode for exporting\n"); log.info("-outputCSV : location of parsed CSV file\n"); From 43a0b50e406f4cfbe1503a9995d615eb7d9324cc Mon Sep 17 00:00:00 2001 From: elkrieg Date: Mon, 7 Aug 2017 13:03:11 +0400 Subject: [PATCH 32/38] height typo fix --- src/main/java/net/atomique/ksar/Main.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/atomique/ksar/Main.java b/src/main/java/net/atomique/ksar/Main.java index a0385847..2777691c 100644 --- a/src/main/java/net/atomique/ksar/Main.java +++ b/src/main/java/net/atomique/ksar/Main.java @@ -39,7 +39,7 @@ public static void usage() { log.info("-outputPDF : location of output pdf file\n"); log.info("-outputIMG : prefix for output images\n"); log.info("-width : width for output png charts\n"); - log.info("-heigth : heigth for output png charts"); + log.info("-height : heigth for output png charts"); log.info("-tags : comma separated list of nodes for export. ex: 'CPU all,Load'"); log.info("-dateFormat : date time format. Example: MM/DD/YYYY 23:59:59"); System.exit(0); @@ -172,7 +172,7 @@ public static void main(String[] args) { continue; } - if ("-heigth".equals(arg)) { + if ("-height".equals(arg)) { // This will be CSV file to export by deafault if (i < args.length) { GlobalOptions.setWidth(Integer.parseInt(args[i++])); From a39c4bb958bcab4bb9e268cdafcc7fc0ad478d97 Mon Sep 17 00:00:00 2001 From: elkrieg Date: Mon, 7 Aug 2017 13:15:29 +0400 Subject: [PATCH 33/38] Update Main.java --- src/main/java/net/atomique/ksar/Main.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/net/atomique/ksar/Main.java b/src/main/java/net/atomique/ksar/Main.java index 2777691c..18abe765 100644 --- a/src/main/java/net/atomique/ksar/Main.java +++ b/src/main/java/net/atomique/ksar/Main.java @@ -121,7 +121,6 @@ public static void main(String[] args) { continue; } if ("-outputCSV".equals(arg)) { - // This will be CSV file to export by deafault if (i < args.length) { GlobalOptions.setOutCSV(args[i++]); } else { @@ -131,7 +130,6 @@ public static void main(String[] args) { } if ("-outputPDF".equals(arg)) { - // This will be CSV file to export by deafault if (i < args.length) { GlobalOptions.setOutPDF(args[i++]); } else { @@ -163,7 +161,6 @@ public static void main(String[] args) { } if ("-width".equals(arg)) { - // This will be CSV file to export by deafault if (i < args.length) { GlobalOptions.setWidth(Integer.parseInt(args[i++])); } else { @@ -173,9 +170,8 @@ public static void main(String[] args) { } if ("-height".equals(arg)) { - // This will be CSV file to export by deafault if (i < args.length) { - GlobalOptions.setWidth(Integer.parseInt(args[i++])); + GlobalOptions.setHeigth(Integer.parseInt(args[i++])); } else { exit_error(resource.getString("INPUT_REQUIRE_ARG")); } From 91d6efd7cf7cb3fad35310bcccba0294f5ef9b33 Mon Sep 17 00:00:00 2001 From: elkrieg Date: Mon, 7 Aug 2017 13:18:48 +0400 Subject: [PATCH 34/38] Update Linux.java --- src/main/java/net/atomique/ksar/parser/Linux.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/atomique/ksar/parser/Linux.java b/src/main/java/net/atomique/ksar/parser/Linux.java index 6cc4cc5a..cae5aa08 100644 --- a/src/main/java/net/atomique/ksar/parser/Linux.java +++ b/src/main/java/net/atomique/ksar/parser/Linux.java @@ -159,7 +159,8 @@ public int parse(String line, String[] columns) { GraphConfig mygraphinfo = myosconfig.getGraphConfig(checkStat); if (mygraphinfo != null) { if ("unique".equals(mygraphinfo.getType())) { - obj = new Graph(mysar, mygraphinfo, mygraphinfo.getTitle(), line, firstdatacolumn, mysar.graphtree); + obj = new Graph(mysar, mygraphinfo, mygraphinfo.getTitle(), line, firstdatacolumn, + mysar.graphtree); ListofGraph.put(checkStat, obj); currentStat = checkStat; From a16205e439e519cef70d4c916a140af577563235 Mon Sep 17 00:00:00 2001 From: elkrieg Date: Mon, 7 Aug 2017 13:21:41 +0400 Subject: [PATCH 35/38] moved vars declaration back to the end of file --- .../java/net/atomique/ksar/AllParser.java | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/atomique/ksar/AllParser.java b/src/main/java/net/atomique/ksar/AllParser.java index 396a5fef..1f4a0ad6 100644 --- a/src/main/java/net/atomique/ksar/AllParser.java +++ b/src/main/java/net/atomique/ksar/AllParser.java @@ -20,32 +20,6 @@ public abstract class AllParser { - protected String sarStartDate = null; - protected String sarEndDate = null; - - protected LocalDateTime startofgraph = null; - protected LocalDateTime endofgraph = null; - protected TreeSet DateSamples = new TreeSet(); - protected int firstdatacolumn = 0; - - abstract public String getInfo(); - - abstract public void parse_header(String s); - - abstract public void updateUITitle(); - - protected kSar mysar = null; - protected OSConfig myosconfig = null; - protected String ParserName = null; - - protected LocalTime parsetime = null; - protected LocalDate parsedate = null; - - protected String currentStat = "NONE"; - protected String dateFormat = "MM/dd/yy"; - protected String timeFormat = "HH:mm:ss"; - protected int timeColumn = 1; - private static final Logger log = LoggerFactory.getLogger(AllParser.class); private static final Map DATE_FORMAT_REGEXPS = new HashMap() { { @@ -158,4 +132,30 @@ public static String determineDateFormat(String dateString) { } return null; // Unknown format. } + + protected String sarStartDate = null; + protected String sarEndDate = null; + + protected LocalDateTime startofgraph = null; + protected LocalDateTime endofgraph = null; + protected TreeSet DateSamples = new TreeSet(); + protected int firstdatacolumn = 0; + + abstract public String getInfo(); + + abstract public void parse_header(String s); + + abstract public void updateUITitle(); + + protected kSar mysar = null; + protected OSConfig myosconfig = null; + protected String ParserName = null; + + protected LocalTime parsetime = null; + protected LocalDate parsedate = null; + + protected String currentStat = "NONE"; + protected String dateFormat = "MM/dd/yy"; + protected String timeFormat = "HH:mm:ss"; + protected int timeColumn = 1; } From 0a5817cb041c8596986471bdfe9c5a7dcde69d6e Mon Sep 17 00:00:00 2001 From: elkrieg Date: Mon, 7 Aug 2017 13:30:04 +0400 Subject: [PATCH 36/38] format fixes --- src/main/java/net/atomique/ksar/AllParser.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/net/atomique/ksar/AllParser.java b/src/main/java/net/atomique/ksar/AllParser.java index 1f4a0ad6..aed509ff 100644 --- a/src/main/java/net/atomique/ksar/AllParser.java +++ b/src/main/java/net/atomique/ksar/AllParser.java @@ -132,8 +132,7 @@ public static String determineDateFormat(String dateString) { } return null; // Unknown format. } - - protected String sarStartDate = null; + protected String sarStartDate = null; protected String sarEndDate = null; protected LocalDateTime startofgraph = null; From 107623bdab3c4ea48175f76fb0c28253458cdb2f Mon Sep 17 00:00:00 2001 From: elkrieg Date: Mon, 7 Aug 2017 13:49:46 +0400 Subject: [PATCH 37/38] Update AllParser.java --- src/main/java/net/atomique/ksar/AllParser.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/atomique/ksar/AllParser.java b/src/main/java/net/atomique/ksar/AllParser.java index aed509ff..5d4585fd 100644 --- a/src/main/java/net/atomique/ksar/AllParser.java +++ b/src/main/java/net/atomique/ksar/AllParser.java @@ -132,6 +132,7 @@ public static String determineDateFormat(String dateString) { } return null; // Unknown format. } + protected String sarStartDate = null; protected String sarEndDate = null; From e5eb850080fcb0932598dccdd74585318ae6d7db Mon Sep 17 00:00:00 2001 From: Maksim Sazhnov Date: Sat, 28 Apr 2018 17:24:32 +0400 Subject: [PATCH 38/38] format issues --- src/main/java/net/atomique/ksar/Main.java | 3 ++- src/main/java/net/atomique/ksar/parser/Linux.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/atomique/ksar/Main.java b/src/main/java/net/atomique/ksar/Main.java index ec2af77e..7a0aae97 100644 --- a/src/main/java/net/atomique/ksar/Main.java +++ b/src/main/java/net/atomique/ksar/Main.java @@ -32,13 +32,14 @@ public class Main { static ResourceBundle resource = ResourceBundle.getBundle("net/atomique/ksar/Language/Message"); public static void usage() { + show_version(); log.info("-input : input sar statistics file \n"); log.info("-n : toggles nongui mode for exporting\n"); log.info("-outputCSV : location of parsed CSV file\n"); log.info("-outputPDF : location of output pdf file\n"); log.info("-outputIMG : prefix for output images\n"); log.info("-width : width for output png charts\n"); - log.info("-heigth : heigth for output png charts"); + log.info("-height : heigth for output png charts"); log.info("-tags : comma separated list of nodes for export. ex: 'CPU all,Load'"); log.info("-dateFormat : date time format. Example: MM/DD/YYYY 23:59:59"); System.exit(0); diff --git a/src/main/java/net/atomique/ksar/parser/Linux.java b/src/main/java/net/atomique/ksar/parser/Linux.java index a5382e01..cb9a71af 100644 --- a/src/main/java/net/atomique/ksar/parser/Linux.java +++ b/src/main/java/net/atomique/ksar/parser/Linux.java @@ -156,7 +156,8 @@ public int parse(String line, String[] columns) { GraphConfig mygraphinfo = myosconfig.getGraphConfig(checkStat); if (mygraphinfo != null) { if ("unique".equals(mygraphinfo.getType())) { - obj = new Graph(mysar, mygraphinfo, mygraphinfo.getTitle(), line, firstdatacolumn, mysar.graphtree); + obj = new Graph(mysar, mygraphinfo, mygraphinfo.getTitle(), line, firstdatacolumn, + mysar.graphtree); ListofGraph.put(checkStat, obj); currentStat = checkStat;