Name

global.DatabaseDiagnostics

Description

No description available

Script

var DatabaseDiagnostics = Class.create();

DatabaseDiagnostics.prototype = {
initialize : function() {
    this.dbi = null;
},

ping: function(size) {
    size = (size>0? size : 60);
    var randomString = GlideStringUtil.getRandomString(size);
    var gr = new GlideRecord("diagnostics_test");
    gr.data = randomString;
    var sw = new GlideStopWatch();

    var sys_id = gr.insert();
    gr.initialize();
    gr.addQuery("sys_id", sys_id);
    gr.query();
    gr.next();
    gr.deleteRecord();

    return sw.getTime();
},

pingFriendly: function(count, size) {
    var results = new Array();

    if (!count)
        count = 10;

    for(var i = 0; i < count; i++) {
        results.push(this.ping(size));
    }

    this._printFriendlyPing(results);
},

getDBI: function() {
    if (!this.dbi)
        this.dbi = new GlideDBConfiguration.getDBI('sys_dictionary');

    return this.dbi;
},

isOracle: function() {
    return this.getDBI().isOracle();
},

getDriver: function() {
    return this.getDBI().getDriverName();
},

getType: function() {
    if (this.getDBI().isMySQL())
  	  return "mysql";
    
    if (this.getDBI().isOracle())
  	  return "oracle";
    
    if (this.getDBI().isSqlServer())
  	  return "sqlserver";
    
    return this.getDBI().getRDBMS();
},

getJDBC: function() {
    return this.getDBI().getDriverVersion();
},

getVersion: function() {
    return this.getDBI().getDatabaseProductVersion();
},

getConnections: function() {
    var connections = new Array();
    var dbCfgMgr = GlideDBConfigurationManager.get();
    var poolNames = dbCfgMgr.getPoolNames();

    for (var i = poolNames.iterator(); i.hasNext();) {
        var name = i.next();
        var pool = dbCfgMgr.getPool(name);
        var pcons = pool.getConnections();
        for(var p = 0; p < pcons.length; p++) {
            connections.push(pcons[p]);
        }
    }

    return connections;
},

getConnectionsCount: function() {
    return parseInt(this.getConnections().length);
},

getConnectionDetails: function(connections, i) {
    var c = connections[i];
    var details = { status: "free", sql: "*unknown*" };

    if (!c || c == null)
        return details;

    if (c.getLastSQL())
        details.sql = c.getLastSQL();
    
    if (!c.isAvailable())
        details.status = "in use (" + c.getUseTime() + " ms)";

    return details;
},

destroy: function() {
  if (!this.dbi)
     return;

  this.dbi.close();
  this.dbi = null;
},

_printFriendlyPing: function(results) {
    var low = 99999, high = 0, avg = 0;

    for(var i = 0; i < results.length; i++) {
        var result = results[i];
        if (result < low)
            low = result;
        if (result > high)
            high = result

        avg += result;
        gs.log("ping db: " + result + "ms");
    }

    gs.log("ping low: " + low + "ms, high: " + high + "ms, avg: " + parseInt(avg/results.length) + "ms");
},

type: "DatabaseDiagnostics"
}

Sys ID

6d67f0410a0a0bb900e6df6a66188c2f

Offical Documentation

Official Docs: