ssion- gt; get_request ($ InOctets);
$ ResultOutOctets=$ session- gt; get_request ($ OutOctets);
$ ResultInErrors=$ session- gt; get_request ($ ifInErrors);
$ ResultOutErrors=$ session- gt; get_request ($ ifOutErrors);
Для опитування всіх інтерфейсів одного комутатора організовується цикл.
Запис інформації повинна вестися в бази даних. Для роботи з СУБД (системою управління базами даних) MySQL та іншими для мови програмування Perl також існують модулі. У розробляється програмі використовується модуль DBI. Всі розглянуті модулі підтримують різні операційні системи, тому можливо їх використання для вбудованого інтерпретатора Linux.
Використовуючи засоби модуля DBI встановити з'єднання з базою даних можна наступним чином:
$ dbi_user= root raquo ;;
$ dbi_password= raquo ;;
$ dbi_database= Sw_01 raquo ;;
$ dbi_host= localhost raquo ;;
$ dbi_host2= 192.168.0.1 raquo ;;
$ dbi_dsn= DBI: mysql: database=$ dbi_database; host=$ dbi_host raquo ;;
$ dbi_dsn2= DBI: mysql: database=$ dbi_database; host=$ dbi_host2 raquo ;;
$ dbh=DBI- gt; connect ($ dbi_dsn, $ dbi_user, $ dbi_password, {AutoCommit= gt; 1, RaiseError= gt; 1, PrintError= gt; 1});
$ dbh2=DBI- gt; connect ($ dbi_dsn2, $ dbi_user, $ dbi_password, {AutoCommit= gt; 1, RaiseError= gt; 1, PrintError= gt; 1});
Тобто необхідно знати ім'я користувача, пароль, назва бази даних та адресу. У розглянутому фрагменті програмного коду підключення проводиться відразу до двох баз даним з однаковими іменами - до локальної та віддаленої. Таким чином можливо передавати інформацію відразу в локальну і центральну бази даних.
Для зручності подальшої обробки збираної статистичної інформації таблиці в базах даних організовані так, що зберігають інформацію тільки за кожен місяць. При цьому розділені таблиці для зберігання загальної інформації про комутаторі та інформації про інтерфейси. Для того щоб автоматично кожен місяць створювалася окрема таблиця, використовуються засоби Perl для визначення поточної дати:
($ month, $ year)=(localtime) [4,5];
$ table_name=sprintf (% 02d% 02d raquo ;, $ month + 1, $ year + 1900);
А потім перевіряється наявність в базі даних таблиці з таким ім'ям. У разі відсутності такої таблиці, вона створюється:
# Виконання запиту SQL з програми, написаної на Perl
# з поверненням в програму результатів запиту
$ sth=$ dbh- gt; prepare ( show tables from $ dbi_database like g $ table_name raquo ;; );
$ sth- gt; execute () or die $ dbh- gt; errstr;
$ ex=$ sth- gt; fetchrow_array (); ($ ex ne g $ table_name )
# Виконання запиту SQL з програми, написаної на Perl
# без повернення в програму результатів
{$ dbh- gt; do ($ sql_create_gtable);
$ sth- gt; execute () or die $ dbh- gt; errstr;};
Запит SQL (Structured Query Language - мова структурованих запитів) на створення таблиці для зберігання інформації про комутатори виглядає наступним чином:
($ sql_create_gtable)= CREATE TABLE g $ table_name (INT (10) UNSIGNED DEFAULT 0 NOT NULL AUTO_INCREMENT, INT (11) UNSIGNED, SMALLINT (3) UNSIGNED, SMALLINT (3 ) UNSIGNED, INT (11) UNSIGNED, TEXT, KEY (sID)); raquo ;;
А запит на створення таблиці для зберігання даних про комутаторі виглядає так:
($ sql_create_iftable)= CREATE TABLE if $ table_name (INT (10) UNSIGNED DEFAULT 0 NOT NULL AUTO_INCREMENT, INT (11) UNSIGNED, TEXT, INT (10) UNSIGNED, INT (10) UNSIGNED, INT (10) UNSIGNED, TINYINT (1) UNSIGNED, TINYINT (1) UNSIGNED, INT (6) UNSIGNED, INT (6) UNSIGNED, KEY (sID)); raquo ;;
Щоб визначити, змінився чи ні статус інтерфейсу, попередні стани інтерфейсів в програмі зберігаються у файлі state.old. При i-ой ітерації програмного циклу з файлу береться відповідне значення і порівнюється з поточним станом. При розбіжності цих значень запускається стандартна програма для відправки електронної пошти в Linux Sendmail, і відправляється повідомлення адміністратору.
$ state_c=$ ResultOper- gt; {$ OperPort};
$ state_o=substr ($ previous, $ i, 1);
$ current.=$ state_c; ...