Что нового

[Данные, строки] Получение даты и времени из базы и вывод в консоль

itskun

Новичок
Сообщения
1
Репутация
0
Версия AutoIt: 3.3.12.0

Описание:
Подключиться к базе 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
 
Верх