Initial commit
0 parents
Showing
19 changed files
with
741 additions
and
0 deletions
JavaMON/Actions.java
0 → 100644
| 1 | /* | ||
| 2 | * LoadRunner Java script. (Build: _build_number_) | ||
| 3 | * | ||
| 4 | * Script Description: | ||
| 5 | * | ||
| 6 | */ | ||
| 7 | |||
| 8 | import java.util.ArrayList; | ||
| 9 | import lrapi.lr; | ||
| 10 | import se.lil.om.*; | ||
| 11 | |||
| 12 | public class Actions | ||
| 13 | { | ||
| 14 | |||
| 15 | ArrayList<OraMon> oraList = new ArrayList<OraMon>(); | ||
| 16 | |||
| 17 | boolean firstIteration = true; | ||
| 18 | String empty = ""; | ||
| 19 | |||
| 20 | public int init() throws Throwable | ||
| 21 | { | ||
| 22 | if(lr.get_attrib_string("ConnectionString") == null || lr.get_attrib_string("User") == null || lr.get_attrib_string("Password") == null || | ||
| 23 | lr.get_attrib_string("ConnectionString").equals(empty) || lr.get_attrib_string("User").equals(empty) || lr.get_attrib_string("Password").equals(empty)) | ||
| 24 | { | ||
| 25 | lr.error_message("Attributes are missing for Oracle: ConnectionString, User or Password are null. Nothing to do, aborting vuser."); | ||
| 26 | lr.exit(lr.EXIT_VUSER, lr.FAIL); | ||
| 27 | } | ||
| 28 | |||
| 29 | String[] conS = lr.get_attrib_string("ConnectionString").split(","); | ||
| 30 | String[] usrS = lr.get_attrib_string("User").split(","); | ||
| 31 | String[] pasS = lr.get_attrib_string("Password").split(","); | ||
| 32 | |||
| 33 | if(conS.length != usrS.length || conS.length != pasS.length) | ||
| 34 | { | ||
| 35 | lr.error_message("Oracle has multiple comma separated connection strings but not the same number of multiple user or password strings. Cannot continue, abort."); | ||
| 36 | lr.exit(lr.EXIT_VUSER, lr.FAIL); | ||
| 37 | } | ||
| 38 | |||
| 39 | for(int x=0; x<conS.length; x++) | ||
| 40 | { | ||
| 41 | OraMon mon = new OraMon(); | ||
| 42 | lr.debug_message (lr.MSG_CLASS_EXTENDED_LOG , " Using " + conS[x].trim() + " User " + usrS[x].trim() + " Pass " + pasS[x].trim()); | ||
| 43 | mon.open(conS[x].trim(), usrS[x].trim(), pasS[x].trim()); | ||
| 44 | oraList.add(mon); | ||
| 45 | } | ||
| 46 | return 0; | ||
| 47 | }//end of init | ||
| 48 | |||
| 49 | |||
| 50 | public int action() throws Throwable | ||
| 51 | { | ||
| 52 | |||
| 53 | for(OraMon oracle : oraList) | ||
| 54 | { | ||
| 55 | lr.debug_message (lr.MSG_CLASS_EXTENDED_LOG , "#### ORACLE COUNTERS ####"); | ||
| 56 | lr.debug_message (lr.MSG_CLASS_EXTENDED_LOG, "Using: " + oracle.getConString()); | ||
| 57 | oracle.getData(); | ||
| 58 | lr.debug_message (lr.MSG_CLASS_EXTENDED_LOG, "Returned DB Name: " + oracle.getDBName()); | ||
| 59 | |||
| 60 | if(firstIteration == false) | ||
| 61 | { | ||
| 62 | String instance = oracle.getDBName(); | ||
| 63 | sendDataPoint("ORA Cpus (#) " + instance, oracle.getNumberOfCPUs()); | ||
| 64 | sendDataPoint("ORA Cpu Time (ms/s) " + instance, oracle.getCPUTimePerSecond()); | ||
| 65 | sendDataPoint("ORA Cpu Usage (%) " + instance, oracle.getCPUPercent()); | ||
| 66 | sendDataPoint("ORA Logical Reads (#/s) " + instance, oracle.getLogicalReadsPerSecond()); | ||
| 67 | sendDataPoint("ORA Consistent Gets (#/s) " + instance, oracle.getPerSecondValue("consistent gets")); | ||
| 68 | sendDataPoint("ORA DB Block Gets (#/s) " + instance, oracle.getPerSecondValue("db block gets")); | ||
| 69 | sendDataPoint("ORA Cache Hit Ratio (%) " + instance, oracle.getCacheHitRatioPercent()); | ||
| 70 | sendDataPoint("ORA Buffer Cache Hit Ratio (%) " + instance, oracle.getBufferCacheHitRatioPercent()); | ||
| 71 | sendDataPoint("ORA DB Block Changes (#/s) " + instance, oracle.getPerSecondValue("db block changes")); | ||
| 72 | sendDataPoint("ORA Redo Size (#/s) " + instance, oracle.getPerSecondValue("redo size")); | ||
| 73 | sendDataPoint("ORA Physical Reads (#/s) " + instance, oracle.getPerSecondValue("physical reads")); | ||
| 74 | sendDataPoint("ORA Physical Writes (#/s) " + instance, oracle.getPerSecondValue("physical writes")); | ||
| 75 | sendDataPoint("ORA Redo Writes (#/s) " + instance, oracle.getPerSecondValue("redo writes")); | ||
| 76 | sendDataPoint("ORA Non-idle Wait Time (ms/s) " + instance, oracle.getPerSecondValue("non-idle wait time")); | ||
| 77 | sendDataPoint("ORA File I/O Wait Time (ms/s) " + instance, oracle.getPerSecondValue("file io wait time")); | ||
| 78 | sendDataPoint("ORA Executes (#/s) " + instance, oracle.getPerSecondValue("execute count")); | ||
| 79 | sendDataPoint("ORA User Calls (#/s) " + instance, oracle.getPerSecondValue("user calls")); | ||
| 80 | sendDataPoint("ORA User Commits (#/s) " + instance, oracle.getPerSecondValue("user commits")); | ||
| 81 | sendDataPoint("ORA User Rollbacks (#/s) " + instance, oracle.getPerSecondValue("user rollbacks")); | ||
| 82 | sendDataPoint("ORA Parse Count Total (#/s) " + instance, oracle.getPerSecondValue("parse count (total)")); | ||
| 83 | sendDataPoint("ORA Parse Count Hard (#/s) " + instance, oracle.getPerSecondValue("parse count (hard)")); | ||
| 84 | } else { | ||
| 85 | firstIteration = false; | ||
| 86 | } | ||
| 87 | } | ||
| 88 | |||
| 89 | return 0; | ||
| 90 | }//end of action | ||
| 91 | |||
| 92 | |||
| 93 | public int end() throws Throwable | ||
| 94 | { | ||
| 95 | for(OraMon oracle : oraList) | ||
| 96 | { | ||
| 97 | oracle.close(); | ||
| 98 | } | ||
| 99 | |||
| 100 | return 0; | ||
| 101 | }//end of end | ||
| 102 | |||
| 103 | // Needed to avoid LR12 VuGen from hanging in a CPU loop (later fixed by a patch but just in case) | ||
| 104 | public void sendDataPoint(String name, double value) | ||
| 105 | { | ||
| 106 | lr.user_data_point(name, value); | ||
| 107 | } | ||
| 108 | } | ||
| 109 | |||
| 110 |
JavaMON/Actions.java.sed
0 → 100644
| 1 | /* | ||
| 2 | * LoadRunner Java script. (Build: _build_number_) | ||
| 3 | * | ||
| 4 | * Script Description: | ||
| 5 | * | ||
| 6 | */ | ||
| 7 | |||
| 8 | import java.util.ArrayList; | ||
| 9 | import lrapi.lr; | ||
| 10 | import se.lil.om.*; | ||
| 11 | |||
| 12 | public class Actions | ||
| 13 | { | ||
| 14 | |||
| 15 | ArrayList<OraMon> oraList = new ArrayList<OraMon>(); | ||
| 16 | |||
| 17 | boolean firstIteration = true; | ||
| 18 | String empty = ""; | ||
| 19 | |||
| 20 | public int init() throws Throwable | ||
| 21 | { | ||
| 22 | if(lr.get_attrib_string("ConnectionString") == null || lr.get_attrib_string("User") == null || lr.get_attrib_string("Password") == null || | ||
| 23 | lr.get_attrib_string("ConnectionString").equals(empty) || lr.get_attrib_string("User").equals(empty) || lr.get_attrib_string("Password").equals(empty)) | ||
| 24 | { | ||
| 25 | lr.error_message("Attributes are missing for Oracle: ConnectionString, User or Password are null. Nothing to do, aborting vuser."); | ||
| 26 | lr.exit(lr.EXIT_VUSER, lr.FAIL); | ||
| 27 | } | ||
| 28 | |||
| 29 | String[] conS = lr.get_attrib_string("ConnectionString").split(","); | ||
| 30 | String[] usrS = lr.get_attrib_string("User").split(","); | ||
| 31 | String[] pasS = lr.get_attrib_string("Password").split(","); | ||
| 32 | |||
| 33 | if(conS.length != usrS.length || conS.length != pasS.length) | ||
| 34 | { | ||
| 35 | lr.error_message("Oracle has multiple comma separated connection strings but not the same number of multiple user or password strings. Cannot continue, abort."); | ||
| 36 | lr.exit(lr.EXIT_VUSER, lr.FAIL); | ||
| 37 | } | ||
| 38 | |||
| 39 | for(int x=0; x<conS.length; x++) | ||
| 40 | { | ||
| 41 | OraMon mon = new OraMon(); | ||
| 42 | lr.debug_message (lr.MSG_CLASS_EXTENDED_LOG , " Using " + conS[x].trim() + " User " + usrS[x].trim() + " Pass " + pasS[x].trim()); | ||
| 43 | mon.open(conS[x].trim(), usrS[x].trim(), pasS[x].trim()); | ||
| 44 | oraList.add(mon); | ||
| 45 | } | ||
| 46 | return 0; | ||
| 47 | }////end of init | ||
| 48 | |||
| 49 | |||
| 50 | public int action() throws Throwable | ||
| 51 | { | ||
| 52 | |||
| 53 | for(OraMon oracle : oraList) | ||
| 54 | { | ||
| 55 | lr.debug_message (lr.MSG_CLASS_EXTENDED_LOG , "#### ORACLE COUNTERS ####"); | ||
| 56 | lr.debug_message (lr.MSG_CLASS_EXTENDED_LOG, "Using: " + oracle.getConString()); | ||
| 57 | oracle.getData(); | ||
| 58 | lr.debug_message (lr.MSG_CLASS_EXTENDED_LOG, "Returned DB Name: " + oracle.getDBName()); | ||
| 59 | |||
| 60 | if(firstIteration == false) | ||
| 61 | { | ||
| 62 | String instance = oracle.getDBName(); | ||
| 63 | sendDataPoint("ORA Cpus (#) " + instance, oracle.getNumberOfCPUs()); | ||
| 64 | sendDataPoint("ORA Cpu Time (ms/s) " + instance, oracle.getCPUTimePerSecond()); | ||
| 65 | sendDataPoint("ORA Cpu Usage (%) " + instance, oracle.getCPUPercent()); | ||
| 66 | sendDataPoint("ORA Logical Reads (#/s) " + instance, oracle.getLogicalReadsPerSecond()); | ||
| 67 | sendDataPoint("ORA Consistent Gets (#/s) " + instance, oracle.getPerSecondValue("consistent gets")); | ||
| 68 | sendDataPoint("ORA DB Block Gets (#/s) " + instance, oracle.getPerSecondValue("db block gets")); | ||
| 69 | sendDataPoint("ORA Cache Hit Ratio (%) " + instance, oracle.getCacheHitRatioPercent()); | ||
| 70 | sendDataPoint("ORA Buffer Cache Hit Ratio (%) " + instance, oracle.getBufferCacheHitRatioPercent()); | ||
| 71 | sendDataPoint("ORA DB Block Changes (#/s) " + instance, oracle.getPerSecondValue("db block changes")); | ||
| 72 | sendDataPoint("ORA Redo Size (#/s) " + instance, oracle.getPerSecondValue("redo size")); | ||
| 73 | sendDataPoint("ORA Physical Reads (#/s) " + instance, oracle.getPerSecondValue("physical reads")); | ||
| 74 | sendDataPoint("ORA Physical Writes (#/s) " + instance, oracle.getPerSecondValue("physical writes")); | ||
| 75 | sendDataPoint("ORA Redo Writes (#/s) " + instance, oracle.getPerSecondValue("redo writes")); | ||
| 76 | sendDataPoint("ORA Non-idle Wait Time (ms/s) " + instance, oracle.getPerSecondValue("non-idle wait time")); | ||
| 77 | sendDataPoint("ORA File I/O Wait Time (ms/s) " + instance, oracle.getPerSecondValue("file io wait time")); | ||
| 78 | sendDataPoint("ORA Executes (#/s) " + instance, oracle.getPerSecondValue("execute count")); | ||
| 79 | sendDataPoint("ORA User Calls (#/s) " + instance, oracle.getPerSecondValue("user calls")); | ||
| 80 | sendDataPoint("ORA User Commits (#/s) " + instance, oracle.getPerSecondValue("user commits")); | ||
| 81 | sendDataPoint("ORA User Rollbacks (#/s) " + instance, oracle.getPerSecondValue("user rollbacks")); | ||
| 82 | sendDataPoint("ORA Parse Count Total (#/s) " + instance, oracle.getPerSecondValue("parse count (total)")); | ||
| 83 | sendDataPoint("ORA Parse Count Hard (#/s) " + instance, oracle.getPerSecondValue("parse count (hard)")); | ||
| 84 | } else { | ||
| 85 | firstIteration = false; | ||
| 86 | } | ||
| 87 | } | ||
| 88 | |||
| 89 | return 0; | ||
| 90 | }////end of action | ||
| 91 | |||
| 92 | |||
| 93 | public int end() throws Throwable | ||
| 94 | { | ||
| 95 | for(OraMon oracle : oraList) | ||
| 96 | { | ||
| 97 | oracle.close(); | ||
| 98 | } | ||
| 99 | |||
| 100 | return 0; | ||
| 101 | }////end of end | ||
| 102 | |||
| 103 | // Needed to avoid LR12 VuGen from hanging in a CPU loop (later fixed by a patch but just in case) | ||
| 104 | public void sendDataPoint(String name, double value) | ||
| 105 | { | ||
| 106 | lr.user_data_point(name, value); | ||
| 107 | } | ||
| 108 | } | ||
| 109 | |||
| 110 |
JavaMON/JavaMON.usr
0 → 100644
| 1 | [General] | ||
| 2 | Type=General-Java | ||
| 3 | RecordedProtocol= | ||
| 4 | DefaultCfg=default.cfg | ||
| 5 | AppName= | ||
| 6 | BuildTarget= | ||
| 7 | ParamRightBrace=> | ||
| 8 | ParamLeftBrace=< | ||
| 9 | NewFunctionHeader=1 | ||
| 10 | LastActiveAction=Actions | ||
| 11 | CorrInfoReportDir= | ||
| 12 | LastResultDir= | ||
| 13 | DevelopTool=Vugen | ||
| 14 | ActionLogicExt=action_logic | ||
| 15 | MajorVersion=12 | ||
| 16 | MinorVersion=50 | ||
| 17 | ParameterFile= | ||
| 18 | GlobalParameterFile= | ||
| 19 | RunType=Java-Interpreter | ||
| 20 | LastModifyVer=12.50.0.0 | ||
| 21 | AdditionalTypes=General-Java | ||
| 22 | GenerateTypes= | ||
| 23 | ActiveTypes= | ||
| 24 | ScriptLanguage=JAVA | ||
| 25 | DisableRegenerate=0 | ||
| 26 | Description= | ||
| 27 | [TransactionsOrder] | ||
| 28 | Order= | ||
| 29 | [Actions] | ||
| 30 | vuser_init=vuser_init.java | ||
| 31 | Actions=Actions.java | ||
| 32 | vuser_end=vuser_end.java | ||
| 33 | [ProtocolsVersion] | ||
| 34 | General-Java=11.0.0.0 | ||
| 35 | [RunLogicFiles] | ||
| 36 | Default Profile=default.usp | ||
| 37 | [StateManagement] | ||
| 38 | 1=1 | ||
| 39 | 4=0 | ||
| 40 | 9=0 | ||
| 41 | 10=0 | ||
| 42 | 11=0 | ||
| 43 | 12=0 | ||
| 44 | 17=0 | ||
| 45 | 18=0 | ||
| 46 | 20=0 | ||
| 47 | 21=0 | ||
| 48 | CurrentState=1 | ||
| 49 | VuserStateHistory=0 65536 65552 | ||
| 50 | LastReplayStatus=2 | ||
| 51 | [ActiveReplay] | ||
| 52 | LastReplayedRunName=result1 | ||
| 53 | ActiveRunName=result1 | ||
| 54 | [Recorded Actions] | ||
| 55 | vuser_init=0 | ||
| 56 | Actions=0 | ||
| 57 | vuser_end=0 | ||
| 58 | [Replayed Actions] | ||
| 59 | vuser_init=1 | ||
| 60 | Actions=1 | ||
| 61 | vuser_end=1 | ||
| 62 | [Modified Actions] | ||
| 63 | vuser_init=0 | ||
| 64 | Actions=1 | ||
| 65 | vuser_end=0 | ||
| 66 | [ManuallyExtraFiles] | ||
| 67 | lilom.jar= | ||
| 68 | ojdbc6.jar= | ||
| 69 | [Interpreters] | ||
| 70 | vuser_init=Java-Interpreter | ||
| 71 | Actions=Java-Interpreter | ||
| 72 | vuser_end=Java-Interpreter |
JavaMON/default.cfg
0 → 100644
| 1 | [General] | ||
| 2 | XlBridgeTimeout=120 | ||
| 3 | DefaultRunLogic=default.usp | ||
| 4 | iter_begins_val=fixed | ||
| 5 | iter_ends_val=fixed | ||
| 6 | ContinueOnError=0 | ||
| 7 | FailTransOnErrorMsg=0 | ||
| 8 | AutomaticTransactions=0 | ||
| 9 | UseThreads=1 | ||
| 10 | [ThinkTime] | ||
| 11 | Options=NOTHINK | ||
| 12 | Factor=1.000000 | ||
| 13 | LimitFlag=0 | ||
| 14 | Limit=1 | ||
| 15 | ThinkTimeRandomLow=50 | ||
| 16 | ThinkTimeRandomHigh=150 | ||
| 17 | [Iterations] | ||
| 18 | NumOfIterations=1 | ||
| 19 | IterationPace=IterationASAP | ||
| 20 | StartEvery=60 | ||
| 21 | RandomMin=60 | ||
| 22 | RandomMax=90 | ||
| 23 | [Log] | ||
| 24 | LogOptions=LogExtended | ||
| 25 | MsgClassData=0 | ||
| 26 | MsgClassParameters=0 | ||
| 27 | MsgClassFull=0 | ||
| 28 | AutoLog=0 | ||
| 29 | PrintTimeStamp=0 | ||
| 30 | [CommandArguments] | ||
| 31 | ConnectionString=jdbc:oracle:thin:@host:port:sid | ||
| 32 | ~ConnectionString=Tex "jdbc:oracle:thin:@host:port:sid" | ||
| 33 | User=system | ||
| 34 | ~User=Tex "oracleuser" | ||
| 35 | Password=passw0rd | ||
| 36 | ~Password= | ||
| 37 | [JavaVM:Options] | ||
| 38 | Java_Env_ClassPath=ojdbc6.jar;se.ttm.tdemon.jar; | ||
| 39 | Java_Env_ClassPath_Unused= | ||
| 40 | Java_Previous_Class_Path= | ||
| 41 | use_jdk=search_jdk | ||
| 42 | jdk_home= | ||
| 43 | Java_VM_Params= | ||
| 44 | Use_Xboot=0 | ||
| 45 | enable_CL_per_vuser=0 | ||
| 46 | [ModemSpeed] | ||
| 47 | EnableModemSpeed=0 | ||
| 48 | EnableCustomModemSpeed=0 | ||
| 49 | ModemSpeed=128000 | ||
| 50 | CustomModemSpeed=1000 |
JavaMON/default.usp
0 → 100644
| 1 | [RunLogicEndRoot:vuser_end] | ||
| 2 | MercIniTreeSectionName="vuser_end" | ||
| 3 | RunLogicObjectKind="Action" | ||
| 4 | Name="vuser_end" | ||
| 5 | RunLogicInterpreterType="Java-Interpreter" | ||
| 6 | MercIniTreeFather="RunLogicEndRoot" | ||
| 7 | RunLogicActionType="VuserEnd" | ||
| 8 | [RunLogicInitRoot:vuser_init] | ||
| 9 | MercIniTreeSectionName="vuser_init" | ||
| 10 | RunLogicObjectKind="Action" | ||
| 11 | Name="vuser_init" | ||
| 12 | RunLogicInterpreterType="Java-Interpreter" | ||
| 13 | MercIniTreeFather="RunLogicInitRoot" | ||
| 14 | RunLogicActionType="VuserInit" | ||
| 15 | [RunLogicRunRoot:Actions] | ||
| 16 | MercIniTreeSectionName="Actions" | ||
| 17 | RunLogicObjectKind="Action" | ||
| 18 | Name="Actions" | ||
| 19 | RunLogicInterpreterType="Java-Interpreter" | ||
| 20 | MercIniTreeFather="RunLogicRunRoot" | ||
| 21 | RunLogicActionType="VuserRun" | ||
| 22 | [Profile Actions] | ||
| 23 | Profile Actions name=vuser_init,Actions,vuser_end | ||
| 24 | MercIniTreeSectionName="Profile Actions" | ||
| 25 | MercIniTreeFather="" | ||
| 26 | [RunLogicRunRoot] | ||
| 27 | RunLogicPaceConstTime="60,000" | ||
| 28 | RunLogicRandomPaceMax="90,000" | ||
| 29 | RunLogicActionOrder="Actions" | ||
| 30 | RunLogicAfterPaceMax="90,000" | ||
| 31 | MercIniTreeFather="" | ||
| 32 | RunLogicPaceType="ConstAfter" | ||
| 33 | MercIniTreeSons="Actions" | ||
| 34 | RunLogicNumOfIterations="2" | ||
| 35 | Name="Run" | ||
| 36 | RunLogicAfterPaceMin="60,000" | ||
| 37 | RunLogicRunMode="Sequential" | ||
| 38 | RunLogicPaceConstAfterTime="15,000" | ||
| 39 | RunLogicObjectKind="Group" | ||
| 40 | RunLogicActionType="VuserRun" | ||
| 41 | RunLogicRandomPaceMin="60,000" | ||
| 42 | MercIniTreeSectionName="RunLogicRunRoot" | ||
| 43 | [RunLogicEndRoot] | ||
| 44 | RunLogicActionOrder="vuser_end" | ||
| 45 | MercIniTreeFather="" | ||
| 46 | MercIniTreeSons="vuser_end" | ||
| 47 | RunLogicNumOfIterations="1" | ||
| 48 | Name="End" | ||
| 49 | RunLogicRunMode="Sequential" | ||
| 50 | RunLogicObjectKind="Group" | ||
| 51 | RunLogicActionType="VuserEnd" | ||
| 52 | MercIniTreeSectionName="RunLogicEndRoot" | ||
| 53 | [RunLogicInitRoot] | ||
| 54 | RunLogicActionOrder="vuser_init" | ||
| 55 | MercIniTreeFather="" | ||
| 56 | MercIniTreeSons="vuser_init" | ||
| 57 | RunLogicNumOfIterations="1" | ||
| 58 | Name="Init" | ||
| 59 | RunLogicRunMode="Sequential" | ||
| 60 | RunLogicObjectKind="Group" | ||
| 61 | RunLogicActionType="VuserInit" | ||
| 62 | MercIniTreeSectionName="RunLogicInitRoot" |
JavaMON/lilom.jar
0 → 100644
No preview for this file type
JavaMON/ojdbc5.jar
0 → 100644
No preview for this file type
JavaMON/ojdbc6.jar
0 → 100644
No preview for this file type
JavaMON/vuser_end.java
0 → 100644
JavaMON/vuser_init.java
0 → 100644
LILOM Library/.classpath
0 → 100644
| 1 | <?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | <classpath> | ||
| 3 | <classpathentry kind="src" path=""/> | ||
| 4 | <classpathentry exported="true" kind="lib" path="lib/ojdbc6.jar"/> | ||
| 5 | <classpathentry exported="true" kind="lib" path="lib/ojdbc5.jar"/> | ||
| 6 | <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/> | ||
| 7 | <classpathentry kind="output" path=""/> | ||
| 8 | </classpath> |
LILOM Library/.project
0 → 100644
| 1 | <?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | <projectDescription> | ||
| 3 | <name>LILOM Library</name> | ||
| 4 | <comment></comment> | ||
| 5 | <projects> | ||
| 6 | </projects> | ||
| 7 | <buildSpec> | ||
| 8 | <buildCommand> | ||
| 9 | <name>org.eclipse.jdt.core.javabuilder</name> | ||
| 10 | <arguments> | ||
| 11 | </arguments> | ||
| 12 | </buildCommand> | ||
| 13 | </buildSpec> | ||
| 14 | <natures> | ||
| 15 | <nature>org.eclipse.jdt.core.javanature</nature> | ||
| 16 | </natures> | ||
| 17 | </projectDescription> |
| 1 | eclipse.preferences.version=1 | ||
| 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled | ||
| 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 | ||
| 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve | ||
| 5 | org.eclipse.jdt.core.compiler.compliance=1.6 | ||
| 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate | ||
| 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate | ||
| 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate | ||
| 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error | ||
| 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error | ||
| 11 | org.eclipse.jdt.core.compiler.source=1.6 |
LILOM Library/lib/ojdbc5.jar
0 → 100644
No preview for this file type
LILOM Library/lib/ojdbc6.jar
0 → 100644
No preview for this file type
LILOM Library/se/lil/om/Collector.java
0 → 100644
| 1 | package se.lil.om; | ||
| 2 | |||
| 3 | import java.sql.ResultSet; | ||
| 4 | import java.sql.Timestamp; | ||
| 5 | import java.util.ArrayList; | ||
| 6 | |||
| 7 | class Collector { | ||
| 8 | ArrayList<LongDelta> list = new ArrayList<LongDelta>(); | ||
| 9 | |||
| 10 | public void update(ResultSet rset) throws Throwable { | ||
| 11 | while(rset.next()) { | ||
| 12 | updateValue(rset.getTimestamp(1), rset.getString(2), rset.getLong(3)); | ||
| 13 | } | ||
| 14 | rset.close(); | ||
| 15 | } | ||
| 16 | |||
| 17 | public void updateValue(Timestamp ts, String name, Long value) { | ||
| 18 | LongDelta myDelta = null; | ||
| 19 | for(int x = 0; x<list.size() && myDelta == null; x++) { | ||
| 20 | if(name.equals(list.get(x).name)) { | ||
| 21 | myDelta = list.get(x); | ||
| 22 | } | ||
| 23 | } | ||
| 24 | if(myDelta != null) { | ||
| 25 | myDelta.lastFetch = myDelta.curFetch; | ||
| 26 | myDelta.curFetch = ts; | ||
| 27 | myDelta.lastValue = myDelta.curValue; | ||
| 28 | myDelta.curValue = value; | ||
| 29 | } else { | ||
| 30 | myDelta = new LongDelta(); | ||
| 31 | myDelta.curFetch = ts; | ||
| 32 | myDelta.curValue = value; | ||
| 33 | myDelta.name = name; | ||
| 34 | list.add(myDelta); | ||
| 35 | } | ||
| 36 | } | ||
| 37 | |||
| 38 | public long getPerSecValue(String name) throws Throwable { | ||
| 39 | LongDelta myDelta = null; | ||
| 40 | for(int x = 0; x<list.size() && myDelta == null; x++) { | ||
| 41 | if(name.equals(list.get(x).name)) { | ||
| 42 | myDelta = list.get(x); | ||
| 43 | } | ||
| 44 | } | ||
| 45 | if(myDelta != null) | ||
| 46 | return myDelta.getPerSecondValue(); | ||
| 47 | else | ||
| 48 | return 0; | ||
| 49 | } | ||
| 50 | } | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
LILOM Library/se/lil/om/LongDelta.java
0 → 100644
| 1 | package se.lil.om; | ||
| 2 | |||
| 3 | import java.sql.ResultSet; | ||
| 4 | import java.sql.Timestamp; | ||
| 5 | |||
| 6 | class LongDelta { | ||
| 7 | public String name = null; | ||
| 8 | public Long curValue = null; | ||
| 9 | public Long lastValue = null; | ||
| 10 | public Timestamp lastFetch = null; | ||
| 11 | public Timestamp curFetch = null; | ||
| 12 | |||
| 13 | public void update(ResultSet rset) throws Throwable{ | ||
| 14 | update(rset, false); | ||
| 15 | } | ||
| 16 | public void update(ResultSet rset, boolean convert) throws Throwable{ | ||
| 17 | rset.next(); | ||
| 18 | this.lastFetch = this.curFetch; | ||
| 19 | this.curFetch = rset.getTimestamp(1); | ||
| 20 | this.lastValue = this.curValue; | ||
| 21 | if(convert) | ||
| 22 | this.curValue = rset.getLong(2)/1000; | ||
| 23 | else | ||
| 24 | this.curValue = rset.getLong(2); | ||
| 25 | rset.close(); | ||
| 26 | } | ||
| 27 | public long getPerSecondValue() throws Throwable { | ||
| 28 | if(this.curValue != null && this.lastValue != null && this.lastFetch != null && this.curFetch != null) { | ||
| 29 | // We have values, calculate the number of gets per second | ||
| 30 | long numSeconds = (this.curFetch.getTime() - this.lastFetch.getTime()) / 1000; | ||
| 31 | long delta = this.curValue - this.lastValue; | ||
| 32 | return delta/numSeconds; | ||
| 33 | } else { | ||
| 34 | return 0; | ||
| 35 | } | ||
| 36 | } | ||
| 37 | public long getSeconds() throws Throwable { | ||
| 38 | if(this.lastFetch != null && this.curFetch != null) { | ||
| 39 | long numSeconds = (this.curFetch.getTime() - this.lastFetch.getTime()) / 1000; | ||
| 40 | return numSeconds; | ||
| 41 | } | ||
| 42 | return 0; | ||
| 43 | } | ||
| 44 | } | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
LILOM Library/se/lil/om/OraMon.java
0 → 100644
| 1 | package se.lil.om; | ||
| 2 | |||
| 3 | import java.sql.*; | ||
| 4 | |||
| 5 | public class OraMon { | ||
| 6 | Connection conn = null; | ||
| 7 | String conString = "jdbc:oracle:thin:@//hostname:1521/SID"; | ||
| 8 | String conUser = "system"; | ||
| 9 | String conPass = "passw0rd"; | ||
| 10 | String dbName = null; | ||
| 11 | |||
| 12 | Collector col = new Collector(); | ||
| 13 | |||
| 14 | public String getConString() { | ||
| 15 | return this.conString; | ||
| 16 | } | ||
| 17 | |||
| 18 | //NUM_CPUS | ||
| 19 | int numCpus = 0; | ||
| 20 | public long getNumberOfCPUs() throws Throwable { | ||
| 21 | return numCpus; | ||
| 22 | } | ||
| 23 | |||
| 24 | //DB CPU | ||
| 25 | LongDelta cpuTime = new LongDelta(); | ||
| 26 | public double getCPUPercent() throws Throwable { | ||
| 27 | double perSec = cpuTime.getPerSecondValue(); | ||
| 28 | double totSec = numCpus * 1000; | ||
| 29 | double percent = (perSec / totSec) * 100; | ||
| 30 | return percent; | ||
| 31 | } | ||
| 32 | |||
| 33 | public long getCPUTimePerSecond() throws Throwable { | ||
| 34 | return cpuTime.getPerSecondValue(); | ||
| 35 | } | ||
| 36 | |||
| 37 | public long getPerSecondValue(String name) throws Throwable { | ||
| 38 | return col.getPerSecValue(name); | ||
| 39 | } | ||
| 40 | |||
| 41 | public String getDBName() throws Throwable { | ||
| 42 | return this.dbName; | ||
| 43 | } | ||
| 44 | |||
| 45 | public double getBufferCacheHitRatioPercent() throws Throwable { | ||
| 46 | double conGetsCache = getPerSecondValue("consistent gets from cache"); | ||
| 47 | double dbBlocksCache = getPerSecondValue("db block gets from cache"); | ||
| 48 | double physReadsCache = getPerSecondValue("physical reads cache"); | ||
| 49 | if (conGetsCache + dbBlocksCache + physReadsCache == 0) { | ||
| 50 | return 100; | ||
| 51 | } | ||
| 52 | if (conGetsCache + dbBlocksCache == 0 && physReadsCache > 0) { | ||
| 53 | return 0; | ||
| 54 | } | ||
| 55 | double buffCacheHitRatio = 1 - (physReadsCache/(conGetsCache + dbBlocksCache)); | ||
| 56 | return buffCacheHitRatio * 100; | ||
| 57 | } | ||
| 58 | |||
| 59 | public double getCacheHitRatioPercent() throws Throwable { | ||
| 60 | double conGets = getPerSecondValue("consistent gets"); | ||
| 61 | double dbBlocks = getPerSecondValue("db block gets"); | ||
| 62 | double physReads = getPerSecondValue("physical reads"); | ||
| 63 | if (conGets + dbBlocks + physReads == 0) { | ||
| 64 | return 100; | ||
| 65 | } | ||
| 66 | if (conGets + dbBlocks == 0 && physReads > 0) { | ||
| 67 | return 0; | ||
| 68 | } | ||
| 69 | double cacheHitRatio = 1 - (physReads/(conGets + dbBlocks)); | ||
| 70 | return cacheHitRatio * 100; | ||
| 71 | } | ||
| 72 | |||
| 73 | public long getLogicalReadsPerSecond() throws Throwable { | ||
| 74 | return getPerSecondValue("consistent gets") + getPerSecondValue("db block gets"); | ||
| 75 | } | ||
| 76 | |||
| 77 | public void getData() throws Throwable { | ||
| 78 | Statement stmt = conn.createStatement(); | ||
| 79 | ResultSet rset = null; | ||
| 80 | |||
| 81 | //Get the database name once | ||
| 82 | if(this.dbName == null) { | ||
| 83 | rset = stmt.executeQuery("select value from V$SYSTEM_PARAMETER where name = 'db_name'"); | ||
| 84 | rset.next(); | ||
| 85 | this.dbName = rset.getString(1); | ||
| 86 | rset.close(); | ||
| 87 | } | ||
| 88 | |||
| 89 | //Get values for CPU calculation | ||
| 90 | rset = stmt.executeQuery("select value from V$OSSTAT where STAT_NAME = 'NUM_CPUS'"); | ||
| 91 | rset.next(); | ||
| 92 | this.numCpus = rset.getInt(1); | ||
| 93 | rset.close(); | ||
| 94 | |||
| 95 | cpuTime.update(stmt.executeQuery("select systimestamp, value from V$SYS_TIME_MODEL where stat_name='DB CPU'"), true); | ||
| 96 | |||
| 97 | // Get the entire V_$SYSSTAT table from DB | ||
| 98 | col.update(stmt.executeQuery("select systimestamp, name, value from V$SYSSTAT")); | ||
| 99 | |||
| 100 | stmt.close(); | ||
| 101 | } | ||
| 102 | |||
| 103 | public OraMon() { | ||
| 104 | // TODO Auto-generated constructor stub | ||
| 105 | } | ||
| 106 | |||
| 107 | public OraMon(String con, String user, String pass) { | ||
| 108 | this.conString = con; | ||
| 109 | this.conUser = user; | ||
| 110 | this.conPass = pass; | ||
| 111 | } | ||
| 112 | |||
| 113 | public void open() throws Throwable { | ||
| 114 | Class.forName ("oracle.jdbc.OracleDriver"); | ||
| 115 | this.conn = DriverManager.getConnection(conString, conUser, conPass); | ||
| 116 | } | ||
| 117 | |||
| 118 | public void open(String con, String user, String pass) throws Throwable { | ||
| 119 | Class.forName ("oracle.jdbc.OracleDriver"); | ||
| 120 | if(con != null) this.conString = con; | ||
| 121 | if(user != null) this.conUser = user; | ||
| 122 | if(pass != null) this.conPass = pass; | ||
| 123 | this.conn = DriverManager.getConnection(conString, conUser, conPass); | ||
| 124 | } | ||
| 125 | |||
| 126 | public void close() throws Throwable { | ||
| 127 | if(conn != null) conn.close(); | ||
| 128 | } | ||
| 129 | } | ||
| 130 |
LILOM Library/se/lil/om/TestRunner.java
0 → 100644
| 1 | package se.lil.om; | ||
| 2 | |||
| 3 | import java.util.ArrayList; | ||
| 4 | |||
| 5 | public class TestRunner { | ||
| 6 | |||
| 7 | public TestRunner() { | ||
| 8 | // TODO Auto-generated constructor stub | ||
| 9 | } | ||
| 10 | |||
| 11 | /** | ||
| 12 | * @param args | ||
| 13 | */ | ||
| 14 | public static void main(String[] args) throws Throwable{ | ||
| 15 | // TODO Auto-generated method stub | ||
| 16 | |||
| 17 | ArrayList<OraMon> oraList = new ArrayList<OraMon>(); | ||
| 18 | |||
| 19 | OraMon mon1 = new OraMon("jdbc:oracle:thin:@//hostname:1521/SID1","system","passw0rd"); | ||
| 20 | OraMon mon2 = new OraMon("jdbc:oracle:thin:@//hostname:1521/SID1","system","passw0rd"); | ||
| 21 | mon1.open(); | ||
| 22 | mon2.open(); | ||
| 23 | oraList.add(mon1); | ||
| 24 | oraList.add(mon2); | ||
| 25 | |||
| 26 | int times = 10; | ||
| 27 | while(times-- > 0) { | ||
| 28 | for(OraMon mon : oraList) { | ||
| 29 | Long ts1 = System.currentTimeMillis(); | ||
| 30 | mon.getData(); | ||
| 31 | Long time = System.currentTimeMillis() - ts1; | ||
| 32 | |||
| 33 | System.out.println( | ||
| 34 | "Logical reads:" + mon.getLogicalReadsPerSecond() | ||
| 35 | + " Consistent gets: " + mon.getPerSecondValue("consistent gets") | ||
| 36 | + " Block Gets: " + mon.getPerSecondValue("db block gets") | ||
| 37 | + " Block Changes: " + mon.getPerSecondValue("db block changes") | ||
| 38 | + "\n" | ||
| 39 | + "CPUs: " + mon.getNumberOfCPUs() | ||
| 40 | + " CPU Time: " + mon.getCPUTimePerSecond() + "ms" | ||
| 41 | + " CPU Usage: " + String.format("%1$,.2f", mon.getCPUPercent()) + "%" | ||
| 42 | + "\n" | ||
| 43 | + "Cache Hit Ratio: " + String.format("%1$,.2f", mon.getCacheHitRatioPercent()) + "%" | ||
| 44 | + " Buffer Cache Hit Ratio: " + String.format("%1$,.2f", mon.getBufferCacheHitRatioPercent()) + "%" | ||
| 45 | + "\n" | ||
| 46 | + "Redo size: " + mon.getPerSecondValue("redo size") | ||
| 47 | + " Phys Reads: " + mon.getPerSecondValue("physical reads") | ||
| 48 | + " Phys Writes: " + mon.getPerSecondValue("physical writes") | ||
| 49 | + " Redo Writes: " + mon.getPerSecondValue("redo writes") | ||
| 50 | + "\n" | ||
| 51 | + "Non Idle Wait: " + mon.getPerSecondValue("non-idle wait time") | ||
| 52 | + " File IO Wait: " + mon.getPerSecondValue("file io wait time") | ||
| 53 | + "\n" | ||
| 54 | + "Executes: " + mon.getPerSecondValue("execute count") | ||
| 55 | + " User calls: " + mon.getPerSecondValue("user calls") | ||
| 56 | + " Commits: " + mon.getPerSecondValue("user commits") | ||
| 57 | + " Rollbacks: " + mon.getPerSecondValue("user rollbacks") | ||
| 58 | + " Parse tot: " + mon.getPerSecondValue("parse count (total)") | ||
| 59 | + " Parse hard: " + mon.getPerSecondValue("parse count (hard)") | ||
| 60 | + "\nTime: " + time + "ms" | ||
| 61 | ); | ||
| 62 | |||
| 63 | } | ||
| 64 | Thread.sleep(15000); | ||
| 65 | } | ||
| 66 | |||
| 67 | // Close all mon objects | ||
| 68 | for(OraMon mon : oraList) { | ||
| 69 | mon.close(); | ||
| 70 | } | ||
| 71 | } | ||
| 72 | |||
| 73 | } |
-
Please register or sign in to post a comment