вторник, 25 ноября 2014 г.

Мониторинг записей звонков системы ZOOM CallREC при помощи powershell и post-запроса

Существует ZOOM CallREC - система записи разговоров от Cisco.
Иногда с ней возникали проблемы:
1. Звонки переставали писаться.
2. Появлялись битые звонки, которые невозможно было прослушать.
Возникла задача мониторинга таких проблем.
Был доступ только к веб-интерфейсу ZOOM CallREC.
Необходим Powershell не ниже 3 версии.
Скрипт на Powershell отправляет post-запрос веб-серверу ZOOM CallREC, получает ответ, парсит его, результат присылает на почту.
Код скрипта:
#Скрипт делает post-запрос к веб-интерфейсу проверки записей звонков.
 
#Линк на страницу авторизации
$link2 = "http://1.1.1.1/callrec/loginAction.do"
 
#Делаем get-запрос по линку. Сохраняем сессию в переменной fb.
$r = Invoke-WebRequest $link2 -SessionVariable fb
 
#Определяем параметры авторизации для дальнейшей передачи методом post
$form = $r.Forms[1]
$form.Fields["login"] = "login"
$form.Fields["password"] = "password"
 
#Делаем из сохраненной сессии post-запрос по этому же линку, но уже с передачей логина и пароля. Аналогично можно сделать
#"http://1.1.1.1/callrec/loginAction.do?login=login&password=password"
$re = Invoke-WebRequest -Uri $link2 -WebSession $fb -Method Post -Body $form.Fields
 
#Из сохраненной сессии идем по линку со звонками. Но по дефолту всего 10 звонков
#$zz = Invoke-WebRequest -Uri "http://1.1.1.1/callrec/calldatatable" -WebSession $fb
 
#Нам нужно 500 звонков. Поэтому идем из сохранненной сессии сюда, дальше авторедирект наhttp://1.1.1.1/callrec/calldatatable
$xx = Invoke-WebRequest -Uri "http://1.1.1.1/callrec/filteroperation?countperpage=500" -WebSession $fb
 
#Получим ответ от post-запроса
$Text = $xx.Content
 
#Найдем все строки, содержащие getDayName(текущая дата), а затем в этих строках найдем строку вида "td>минус_один_или_два_часа_от_текущего:"
#Если нашли такую строку, значит за последние два часа звонки пишутся
$datestamp2 = get-date -format "\\(d','M','yyyy\\)"
$datestampfile = "getDayName" + $datestamp2
$parsedate = $Text.Split("r") | Select-String $datestampfile
 
$minus_one_hour = (get-date).AddHours(-1).ToString("%h")
$minus_two_hour = (get-date).AddHours(-2).ToString("%h")
$m1 = "td>" + $minus_one_hour + ":"
$m2 = "td>" + $minus_two_hour + ":"
 
$stringcalls1 = $parsedate | Select-String $m1
$stringcalls2 = $parsedate | Select-String $m2
 
#prehratWarning - значок звонка предупреждения. error - значок звонка битого. Посчитаем их количество.
$parsewarningcalls = $Text.Split(" ") | Select-String "prehratWarning"
$parsebadcalls     = $Text.Split(" ") | Select-String "error"
 
#Если количество звонков-предупреждений на 500 общего количества больше либо равно 4 - ошибка.
#Если количество битых звонков на 500 общего количества больше либо равно 4 - ошибка.
if( ($parsewarningcalls.Count -le 30) -And  ($parsebadcalls.Count -le 8) -And ($stringcalls1.Count -gt 0 -Or $stringcalls2.Count -gt 0) )
{
    $Subject = "Норма при проверке: запись звонков"
    $text5 = "Все в норме"
}
else
{
    $Subject = "Ошибка при проверке: запись звонков"
    $text5 = "`n Проверить по ссылке:http://1.1.1.1/callrec/"
}
 
 
if($parsewarningcalls.Count -gt 30)
  {  $text2 =  "`n Обнаружено более 30 звонков-предупреждений из 500 последних      `n" 
  }
else
  {  $text2 = "" }
 
if($parsebadcalls.Count -gt 8)
  {  $text3 = "`n Обнаружено более 8 битых звонков из 500 последних      `n"  }
else
  {  $text3 = "" }
 
 
if(($stringcalls1.Count -eq $NULL -And $stringcalls2.Count -eq $NULL) -Or ($stringcalls1.Count -eq 0 -And $stringcalls2.Count -eq 0) )
  {  $text1 = "`n Звонков не было в течение 2 часов, либо они не пишутся      `n"  }
else
  {  $text1 = "" }
 
 
$text4 = "`n Количество звонков-предупреждений: " + $parsewarningcalls.Count +
           "`n Количество битых звонков: " + $parsebadcalls.Count + "      `n"
 
#Отправим письмо
$EmailFrom =11@ss.ru”
$EmailTo =22@ss.ru”
 
$body = $text1 +$text2+$text3+$text4+$text5
 
$Encoding = [System.Text.Encoding]::UTF8
 $SmtpServer = “1.1.1.1”
[string]$Encoding="utf-8"
$messageParameters = @{                       
                               Encoding = [System.Text.Encoding]::GetEncoding($Encoding)
            }
 
Send-MailMessage @messageParameters -From $EmailFrom -To $EmailTo -SmtpServer $SmtpServer -Body $body -Subject $Subject 

понедельник, 28 июля 2014 г.

Мониторинг служб Windows в SCOM

1) Необходимо создать группу серверов, на которых необходимо мониторить нужную службу. В меню Authoring, выделить Groups, нажать кнопку "Create new group".
2) Назвать группу осознанным именем, в management pack выбрать services.
3) Добавить необходимые сервера и создать группу.
4) В меню Authoring, выделить  Windows Service, нажать кнопку "Add Monitoring Wizard".
5) Выбрать Windows Service из меню
6) Дать осознанное название и выбрать "services" в management pack
7) Задать имя службы с нужного сервера и выбрать группу, которую создали ранее в Targeted group
8) Создать монитор. При желании остановить некритичную службу и проверить работу монитора (как правило срабатывает через 5-10 минут)

Мониторинг доступности виртуальных серверов Xen в Citrix provisioning console при помощи powershell

В Citrix provisioning console есть несколько виртуалок. Нужно мониторить доступность каждой из них.

Сделаем скрипт на powershell, причем его будем запускать удаленно, на удаленной машине.

На удаленной машине запустить powershell от имени администратора и выполнить команды:
get-service winrm - чтобы была запущена
Enable-PSRemoting –force

Далее подключим mcli для PVC:
В командной строке выполняем
32bits
“C:\Windows\Microsoft.NET\Framework\v2.0.50727\installutil.exe” “C:\Program Files\Citrix\Provisioning Services Console\McliPSSnapIn.dll”
64bits:
“C:\Windows\Microsoft.NET\Framework64\v2.0.50727\installutil.exe” “C:\Program Files\Citrix\Provisioning Services Console\McliPSSnapIn.dll”

Проверим, что связка powershell - Citrix provisioning console работает:

Добавим
Add-PSSnapin -Name McliPSSnapIn

Теперь команда, которая проверяет статус сервера в Citrix provisioning console (1 - активен, 0 - неактивен)
mcli-Get DeviceInfo -p deviceName=name_of_your_host -f active

Далее создаем скрипт на нашей машине (создаем сессию, выполняем проверку, завершаем сессию).

$client_sess = New-PSSession -ComputerName name_of_my_remote_pc

Invoke-Command -session $client_sess {Add-PSSnapin -Name McliPSSnapIn}

$res = Invoke-Command -session $client_sess {mcli-Get DeviceInfo -p deviceName=name_of_your_host -f active}

Remove-PSSession $client_sess



Теперь полный скрипт:
В файле Servers.txt находится список серверов, которые мы должны мониторить в Citrix provisioning console. В каждой строке один сервер. Пробегаем каждый сервер в файле и в Citrix
provisioning console, если все доступны, то высылаем письмо на почту, что все ок, иначе - шлем письмо с ошибкой.

$EmailFrom = “from@yourmail”
$EmailTo = “to@yourmail”

$Encoding = [System.Text.Encoding]::UTF8
$SmtpServer = “10.x.x.x”
 [string]$Encoding="utf-8"
 $messageParameters = @{                      
Encoding = [System.Text.Encoding]::GetEncoding($Encoding)
            }

$client_sess = New-PSSession -ComputerName name_of_my_remote_pc
Invoke-Command -session $client_sess {Add-PSSnapin -Name McliPSSnapIn}

$count = 0
$f = "C:\Servers.txt"
$file = get-content $f
$sum_str = $file.length
$xx = ""
$text = ""

for ($i = 0; $i -le ($sum_str - 1); $i++) {
        $xx = $file[$i]

$res = Invoke-Command -session $client_sess -scriptblock { param($xx)  mcli-Get DeviceInfo -p deviceName=$xx -f active} -ArgumentList $xx

    if($res -match "active: 1") {
$text += "Норма: сервер " +$file[$i]+ " активен " +"`n"
    }
    else {
     $count ++
     $text += "Ошибка: сервер " +$file[$i]+ " неактивен " +"`n"
    }
}

if($count -eq 0)
{
    $Subject = "Проверка Citrix Provisioning - норма"
}
else
{
    $Subject = "Проверка Citrix Provisioning - ошибка"
}

Remove-PSSession $client_sess

Try
{
    get-content -Path $f -ErrorAction Stop
    Send-MailMessage @messageParameters -From $EmailFrom -To $EmailTo -SmtpServer $SmtpServer -Body $text -Subject $Subject
}
Catch
{
    $Subject = "Проверка Citrix Provisioning - ошибка"
    $text += "`n `n"+"Что-то не так"
Send-MailMessage @messageParameters -From $EmailFrom -To $EmailTo -SmtpServer $SmtpServer -Body $text -Subject $Subject
    Break
}

пятница, 6 июня 2014 г.

Не работает google play через роутер Ростелеком sagem f@st 2804

Возникла проблема:
не работает google play через роутер Ростелеком sagem f@st 2804 через xdsl через pppoe
Решение: поменять mtu на 1400.
Для этого необходимо удалить текущий интерфейс ppp1 и настроить по-новому pppoe (в одном из пунктов можно будет задать mtu).

вторник, 15 апреля 2014 г.

Autoit и RDP - черный экран при создании screenshot

Если запускать скрипт Autoit на машине через RDP через планировщик и свернуть окно с сеансом, то при создании screenshot функцией Autoit получится картинка с черным квадратом.

Чтобы решить эту проблему, необходимо разрешить множественный вход на сервере под одной учетной записью (на примере windows server 2008)
Start - Administrative Tools - Remote Desktop Services - Remote Desktop Session Host Configuration.
Выбираем Restrict each user to a single session - Properties - убираем галочку напротив этого пункта. Разлогиниваемся

Затем заходим на машину через RDP, и в этом же сеансе вновь заходим на эту же машину по RDP. Сворачиваем, а скриншоты делаются в фоне.

вторник, 1 апреля 2014 г.

CA SPECTRUM change Disk Threshold Exceeded alarm

By default, after creating a Monitored File System, SPECTRUM will assert an alarm on the MonitoredDisk model.

To have the alarm asserted on the associated Host model for an individual Host model: 
1. Find and select the Host model
2. In the Component Details window select the Information tab
3. Find and expand the System Resources -> File Systems -> Monitored File Systems (RFC 2790) folder
4. Set the Generate Alarm On option to: Device Model

To change the default setting to assert the alarm for all Host models: 
1. Click on the Locater tab in the Navigation panel
2. Execute the Application Models -> All Application Models search
3. Filter for rfc2790app in the Results tab on the Contents panel
4. Highlight all of the rfc2790app models in the Results tab of the Contents panel. Right mouse click and select Utilities -> Attribute Editor from the menu
5. In the Attribute Editor window, click on the add link to the right of the User Defined entry under the Attributes folder
6. In the Attribute Selector window 
a. Filter for the DMon_SendAlarmsTo (0xc41135) attribute for the rfc2790app model 
b. Select the DMon_SendAlarmsTo (0xc41135) attribute for the rfc2790app model
c. Click on the OK button
7. In the Attribute Editor window 
a. Select the DMon_SendAlarmsTo (0xc41135) attribute
b. Click on the ">" button
c. Uncheck the No Change check box
d. Select Device for the value
e. Check the Set As Default check box
f. Click on the Apply button
12. In the confirmation window, click on the Yes button to confirm the default value change
13. In the Attribute Edit Results window, click on the Close button
14. In the Attribute Editor windows, click on the OK button to close the window

воскресенье, 30 марта 2014 г.

Sap logon 720 - Logon Balancing Error 88 ( RC=9 )

Возникла проблема, когда установил Sap GUI. При заходе в Sap logon 720 и выборе любой системы вылетает ошибка - error:Logon balancing error 88:Cannot connect to message server(rc=9).

Оказалось, необходимо зайти в WINNT\system32\drivers\etc\services
и добавить туда строчку вида:
sapmsXXX 3600/tcp
где XXX - имя вашей системы.

В моем случае я добавил
sapmsERP  3600/tcp
sapmsBWP  3603/tcp
И все заработало.

вторник, 4 февраля 2014 г.

Apache + mysql + php + CentOS

Install mysql.

<?php
$host = "127.0.0.1";
$name = "admin";
$pwd = "pwd";

$connect = @mysql_connect($host,$name,$pwd);
echo "ok";
?>
Clear screen.

yum install php-mysql php-gd php-imap php-ldap php-odbc 
service httpd restart


понедельник, 3 февраля 2014 г.

Centos apache + perl + python

1. vi /etc/httpd/conf/httpd.conf

Search
     # AddHandler cgi-script
Replace on
     AddHandler cgi-script .cgi .py .pl

Search
 <Directory "/var/www/html">
# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Add
     Options +ExecCGI

Then 
service httpd restart

2. cd /var/www/html/
    vi helloperl.pl 
Add 
   #!/usr/bin/perl
   print "Content-type: text/html\n\n";
   print "Perl hello";

   vi hellopython.py
Add
  #!/usr/bin/env python
  # -*- coding: UTF-8 -*-

  # enable debugging
  import cgitb
  cgitb.enable()

  print "Content-Type: text/plain;charset=utf-8"
  print

  print "Hello World!"


  Then
   chmod +x helloperl.pl
   chmod +x hellopython.pl
Go to http://mysite/helloperl.pl
Go to http://mysite/hellopython.pl