itskun
Новичок
- Сообщения
- 1
- Репутация
- 0
Версия AutoIt: 3.3.12.0
Описание:
Подключиться к базе postgresql.
Выполнить SQL запрос и получить данные, которые являются датой в формате "2015-02-11 11:15:33.659296"
Далее нужно высчитать сколько времени прошло с момента этой даты и вывести в консоль в формате секунд/минут/часов/дней и тд, в зависимости от того, сколько времени прошло (в консоли должна быть такая фраза к примеру "Это событие совершилось 30 сек назад" или "Это событие совершилось 11 часов назад").
Примечания: Есть набросок ниже, но я не пойму почему он не работает и почему в консоль выводятся кракозябры... (P.S. Вообще это костыль к нагиосу).
Описание:
Подключиться к базе postgresql.
Выполнить SQL запрос и получить данные, которые являются датой в формате "2015-02-11 11:15:33.659296"
Далее нужно высчитать сколько времени прошло с момента этой даты и вывести в консоль в формате секунд/минут/часов/дней и тд, в зависимости от того, сколько времени прошло (в консоли должна быть такая фраза к примеру "Это событие совершилось 30 сек назад" или "Это событие совершилось 11 часов назад").
Примечания: Есть набросок ниже, но я не пойму почему он не работает и почему в консоль выводятся кракозябры... (P.S. Вообще это костыль к нагиосу).
Код:
Func check_com()
Global $opgsqlerror = ObjEvent("AutoIt.Error", "_pgsqlError")
Dim $sdbserverip = "localhost"
Dim $sdbusername = "postgres"
Dim $sdbpassword = "pass"
Dim $sdatabase = "base"
Dim $stablename = "log_s"
Global $pgsqlconn = ObjCreate("ADODB.Connection")
$pgsqlconn.open("DRIVER={PostgreSQL ANSI(x64)};SERVER=" & $sdbserverip & ";DATABASE=" & $sdatabase & ";UID=" & $sdbusername & ";PWD=" & $sdbpassword & ";PORT=5432")
Dim $rowcount = 0
$orowcountquery = $pgsqlconn.execute("SELECT MAX(`srv_time`) FROM `" & $stablename & "`")
With $orowcountquery
While NOT .eof
$rowcount += $orowcountquery.fields(0).value
.movenext
WEnd
EndWith
Local $idatecalc = _datediff("s", dtformat($rowcount), _nowcalc())
_consolewrite("The last package came: " & seconds2format($idatecalc) & " ago.")
$pgsqlconn.close
If $cmdline[0] <> 0 Then
If getstartparameter("-c") < $idatecalc Then
_exit(2)
EndIf
If getstartparameter("-w") < $idatecalc Then
_exit(1)
EndIf
_exit(0)
EndIf
EndFunc
Func _pgsqlerror()
$hexnumber = Hex($opgsqlerror.number, 8)
_consolewrite("Err.description is : " & @TAB & $opgsqlerror.description & @CRLF & "err.windescription : " & @TAB & $opgsqlerror.windescription & @CRLF & "err.number is : " & @TAB & $hexnumber & @CRLF & "err.lastdllerror is : " & @TAB & $opgsqlerror.lastdllerror & @CRLF & "err.scriptline is : " & @TAB & $opgsqlerror.scriptline & @CRLF & "err.source is : " & @TAB & $opgsqlerror.source & @CRLF & "err.helpfile is : " & @TAB & $opgsqlerror.helpfile & @CRLF & "err.helpcontext is : " & @TAB & $opgsqlerror.helpcontext)
_exit(2)
SetError(1)
EndFunc
Func dtformat($dt)
If StringLen($dt) = 14 Then
$yyyy = StringLeft($dt, 4)
$mm = StringMid($dt, 5, 2)
$dd = StringMid($dt, 7, 2)
$hh = StringMid($dt, 9, 2)
$mn = StringMid($dt, 11, 2)
$ss = StringRight($dt, 2)
Return $yyyy & "/" & $mm & "/" & $dd & " " & $hh & ":" & $mn & ":" & $ss
EndIf
Return -1
EndFunc
Func seconds2format($dt)
If $dt >= 86400 Then Return Int($dt / 86400) & " " & "days"
If $dt >= 3600 Then Return Int($dt / 3600) & " " & "hours"
If $dt >= 60 Then Return Int($dt / 60) & " " & "minutes"
If $dt < 60 Then Return $dt & " " & "seconds"
EndFunc
Func getstartparameter($input)
If $cmdline[0] = 0 Then Return 0
Dim $retparam
For $i = 1 To $cmdline[0]
If $input = $cmdline[$i] AND $i < $cmdline[0] Then $retparam = $cmdline[$i + 1]
If $input = $cmdline[$i] AND $i = $cmdline[0] Then $retparam = 1
Next
Return $retparam
EndFunc
#EndRegion Includes
Dim $sscriptversion = "1.00"
If IniRead("nsclient.ini", "/settings/default", "password", "0") <> getstartparameter("-p") Then
_consolewrite("Password Invalid")
_exit(2)
EndIf
If getstartparameter("-t") == "com" Then check_com()
$aux = getstartparameter("-run")
If $aux Then
$aux = StringReplace($aux, "%", " ")
$aux = StringReplace($aux, "#", '"')
ConsoleWrite("Run command: " & $aux)
RunWait($aux)
_consolewrite(" ................. Done ")
_exit(0)
EndIf
_exit(3)
Func _exit($aux)
_consolewrite("Script version: " & $sscriptversion)
Exit $aux
EndFunc
Func _consolewrite($aux)
ConsoleWrite($aux & @CRLF)
EndFunc