def db_growth(self):
        query = "set head off \n \
                set feedback off \n \
                column TOTAL_UTILIZADO_SIZE       format 999999999999999 \n \
                SELECT  TRUNC(SUM((A.BYTES-B.BYTES))) TOTAL_UTILIZADO_SIZE \n \
                FROM \n \
                (   SELECT  x.TABLESPACE_NAME, SUM(x.BYTES) BYTES \n \
                        FROM    DBA_DATA_FILES x,DBA_TABLESPACES y \n \
                        WHERE y.CONTENTS <>'UNDO' \n \
                        AND x.TABLESPACE_NAME=y.TABLESPACE_NAME \n \
                        GROUP BY x.TABLESPACE_NAME) A, \n \
                (   SELECT  TABLESPACE_NAME, SUM(BYTES) BYTES \n \
                        FROM    DBA_FREE_SPACE \n \
                        GROUP BY TABLESPACE_NAME) B \n \
                WHERE  A.TABLESPACE_NAME=B.TABLESPACE_NAME;"

        if self.user.lower() == 'sys':
            result = Utils.run_sqlplus(self.password, self.user, self.sid, query, True, True)
        else:
            result = Utils.run_sqlplus(self.password, self.user, self.sid, query, True, False)
        if 'ORA-' in result:
            print 'Erro desconhecido ao executar a query:' + result
            exit(3)
        try:
            self.growth_gather = int(result.strip(' '))
            self.append_gather()
        except:
            print 'Impossivel tratar o valor da coleta'
            exit(3)
 def single_int_query(user, password, sid, query):
     """
     Executa qualquer query que retorne 1 valor
     inteiro
     :param user: Usuario do oracle
     :param password: Senha do oracle
     :param sid: tnsnames de conexao
     :param query: Diskgroup dos archives
     :return:
     """
     global r
     if user.lower() == 'sys':
         result = Utils.run_sqlplus(password, user, sid, query, True, True)
     else:
         result = Utils.run_sqlplus(password, user, sid, query, True, False)
     if 'ORA-' in result:
         print 'Erro desconhecido ao executar a query:' + result
         exit(3)
     try:
         r_aux = result.strip(' ').replace(',', '.')
         if '.' in r_aux:
             r = int(round(float(r_aux)))
         else:
             r = int(r_aux)
     except:
         print 'Impossivel tratar o resultado da query: %s' % result
         exit(3)
     return r
def main(sid, user, pwd, warning, sum, schemas):
    #args = parse_args()
    query = get_my_query(schemas,sum)
    result = ''
    if user.lower() == 'sys':
        result = Utils.run_sqlplus(pwd, user, sid, query, True, True)
    else:
        result = Utils.run_sqlplus(pwd, user, sid, query, True, False)
    perf_data = ''
    total = 0
    if 'ORA-' in result:
        print 'Erro desconhecido ao executar a query:'+result
        exit(3)
    # Replace 4/3/2 whitespaces devido ao resultado do sqlplus,
    # split '' serve para criar a minha lista com cada coluna em um elemnto
    #strip para tirar os whites antes e dps.
    r = result.strip().replace("    "," ").replace("   "," ").replace("  "," ").split(' ')
    if sum:
        total = int(r[0])
    else:
        it = iter(r)
        for count, schema in zip(it,it):
            perf_data += schema + '=' + count + ' '
            total += int(count)
    perf_data += 'TOTAL='+str(total)+';'+warning
    if total > int(warning):
        print 'WARNING - Sobrecarga no banco, Sessoes:'+str(total)+' | ' +perf_data
        exit(1)
    else:
        print 'Total de Sessoes:' + str(total) + '| ' +perf_data
        exit(0)
 def asm_space(user, password, sid, diskgroup):
     """
     Calcula o tempo de disco
     caso seja um diskgroup ASM
     :param user: Usuario do oracle
     :param password: Senha do oracle
     :param sid: tnsnames de conexao
     :param diskgroup: Diskgroup dos archives
     :return: Espaco disponivel em bytes
     """
     global diskspace
     query = "set head off \n \
             set feedback off \n \
             col free_bytes format 999999999999999 \n \
             SELECT free_mb*1024*1024 as free_bytes \n \
             FROM v$asm_diskgroup \n \
             where name = '%s' \n \
             /" % diskgroup
     if user.lower() == 'sys':
         result = Utils.run_sqlplus(password, user, sid, query, True, True)
     else:
         result = Utils.run_sqlplus(password, user, sid, query, True, False)
     if 'ORA-' in result:
         print 'Erro desconhecido ao executar a query:' + result
         exit(3)
     try:
         diskspace = int(result.strip(' '))
     except:
         print 'Impossivel tratar o valor de espaco ASM. Verifique o nome do diskgroup'
         exit(3)
     return diskspace
def main(sid, user, pwd, warning):
    #sid, user, pwd, warning
        #parse_argsv2(sys.argv[1:])
    result = ''
    query = "set head off \n \
       set feedback off \n \
    SET SERVEROUTPUT ON \n \
        DECLARE \n \
        begindate date; \n \
        enddate date; \n \
        beginval number;\n \
        endval number;\n \
        begin \n \
             select sysdate, sum(value) \n \
    into begindate, beginval \n \
    from v$sysstat \n \
    where name in ('user commits','user_rollbacks'); \n \
    dbms_lock.sleep(5); \n \
    select sysdate, sum(value) \n \
    into enddate, endval \n \
    from v$sysstat  \n \
    where name in ('user commits','user_rollbacks'); \n \
    dbms_output.put_line( (endval-beginval) / ((enddate-begindate) * 86400)); \n \
    end; \n \
    /"
    if user.lower() == 'sys':
        result = Utils.run_sqlplus(pwd, user, sid, query, True, True)
    else:
        result = Utils.run_sqlplus(pwd, user, sid, query, True, False)
    perf_data = ''
    total = 0
    if 'ORA-' in result:
        print 'Erro desconhecido ao executar a query:'+result
        exit(3)
    else:
        perf_data = 'TPS=' + result
        if float(result.replace(',','.')) > int(warning):
            print 'WARNING - Quantidade de transações por segundo acima no normal. TPS:'+result+' | ' +perf_data
            exit(1)
        else:
            print 'OK - Transações por Segundo:' + result + ' | ' + perf_data