Автор работы: Пользователь скрыл имя, 15 Мая 2013 в 05:41, магистерская работа
У результаті виконання магістерської роботи отримано наступні наукові та практичні результати:
вдосконалено методи для нагромадження і аналізу кількісних даних про використання комп’ютерних ресурсів, що на відміну від існуючих враховують тривалість інтерактивної взаємодії з користувачем.
розроблено Web-орієнтоване програмне забезпечення для аналізу і візуалізації даних про користування комп’ютерними ресурсами вищих навчальних закладів.
Наступною задачею розроблюваної програми є пошук позиції у файлі, де знаходиться стрічка з поточною датою у читабельній для людини формі – CURDATE. Як вже було сказано раніше, коли даний цикл проходиться не вперше, то пошук починається з того місця у файлі, де була знайдена поточна дата на попередній ітерації основного циклу (TODAY_POS).
Пошук починається з присвоєння значення хибності локальній булевій змінній curdatestr_found. Ця змінна описуватиме чи знайшовся у файлі протоколу фрагмент, що відповідає за поточну дату. Якщо ні, то вона так і залишиться у значенні хибності, інакше – набуде значення істини.
Далі починається цикл, що триває щонайбільше до кінця файла. В тілі циклу встановлюється нове значення позиції, що відповідає сьогоднішній даті (TODAY_POS). На початку циклу пошуку це значення повинне збігатися з TODAY_POS, тобто значення змінної лишається без змін. Потім починаючи з поточної позиції файла, за допомогою виклику in.getline(buf,BUF_SIZE) зчитується вся стрічка (вся послідовність символів до символу переведення на нову стрічку (‘\n’). Якщо після зчитування стрічки поточна позиція у файлі in.tellg() лишилася без змін, то це свідчить про те, що у стрічці, на яку вказує поточна файлова позиція відсутній перевід на нову стрічку (символ ‘\n’). Останнє може свідчити про невірний формат файла протоколу і не повинне відбуватися за звичайних умов.
Для перевірки того, чи кожна стрічка у файлі завершується переведенням на новий рядок (символом ‘\n’), виконується перевірка умови про зміну поточної позиції читання з файлу після прочитання чергової стрічки:
if (in.tellg() == TODAY_POS)
Якщо поточна позиція файла не змінюється, то це свідчить про невірне форматування файла, про що користувач повідомляється відповідним діалоговим повідомленням і програма завершує своє виконання з кодом зупину 1. Коли такої перевірки не зробити, то у випадку порушення структури файлу (відсутності символа ‘\n’ після стрічки), цикл while (!in.eof()) зависає, ніколи не доходячи до кінця файла. Ця ситуація проявляється у тому, що операційна система фіксує, завантаженість ядра центрального процесора процесом розроблюваної програми на рівні 100%. Відлагодити цю ситуацію вдалося за допомогою спостереження за зміною значення поточної позиції файла до та після зчитування стрічки.
Коли помилки форматування файла
немає, виконується аналіз отриманої
стрічки. Це здійснюється за допомогою
об’єкту класу потокової
Після одержання стрічки дати із стрічки файла протоколу у тимчасовий буфер tmp_date, здійснюється перевірка, чи не дорівнює ця дата поточній даті CURDATE. Ця перевірка виконується за допомогою об’єкту класу string, що є частиною стандартної бібліотеки С++. Звісно з цією ж самою метою можна було б скористатися функцією strcmp з стандартної бібліотеки обробки стрічок мови С, однак доречно використовувати її сучасніший об’єктно-орієнтований аналог, що реалізується методом compare класу string стандартної бібліотеки С++. Повернення цим методом нуля, аналогічно як функцією strcmp, означає, що стрічки літерально еквівалентні. Коли це так, то булевій змінній curdatestr_found, що відповідає за успішність пошуків поточної дати у файлі протоколу, встановлюється значення істинності і цикл пошуку зупиняється.
Незалежно від успіху пошуків запису поточної дати у файлі протоколу, позначається, що цикл пошуку на даному етапі вже відбувався, отже наступний раз він відбуватиметься не вперше, а вдруге, отже булева змінна for_first_time, що характеризує, чи цей цикл виконується вперше, набуває значення хибності.
Наступні оператори програми виконують вже відомі дії щодо визначення поточного активного процесу, вікно якого є у фокусі.
Оскільки у даній
Середовищем виконання проектів, що написані з використанням технології Java server pages виступає Tomcat. Розробку і дослідження системи, що є предметом магістерської роботи виконано у середовищі Tomcat 6.0.
Розробку проекту, згідно з Брунером [27] слід розпочати зі створення структури каталогів веб-орієнтованої системи у папці, де було встановлено контейнер веб-додатків Tomcat 6.0, а саме слід створити папку CompResAnalyseApp в каталозі C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps. У цій папці слід створити файл index.jsp, що буде містити основне меню доступу до способів використання програми, див. рис. 2.1. Вміст цього файла наведено у додатку Е.
Тепер, коли запустити на виконання контейнер веб-додатків, виконавши файл C:\Program Files\Apache Software Foundation\Tomcat 6.0\bin\tomcat6.exe, появиться вікно, див. рис. 3.1, що свідчить про його успішний запуск.
Рисунок 3.1 – Вікно запуску контейнера веб-додатків Tomcat 6.0
Вікно рис. 3.1 можна згорнути. Після запуску браузера і введення в стрічці веб-адреси http://localhost/ появиться вікно рис. 3.2, що свідчить про вірне налаштування серверу веб-додатків.
Рисунок 3.2 – Початкове вікно сервера (контейнера) веб-додатків Tomcat 6.0
При додаванні в кінець цієї адреси
назви проектованого у
Рисунок 3.3 – Меню способів використання веб-орієнтованої системи аналізу використання комп’ютерних ресурсів студентами
Звісно, що на даний момент жоден з пунктів меню не діє, оскільки ще не було створено файлів edit_ips.jsp, soft_categorization.jsp, static_view.jsp, dynamic_view.jsp, див. додаток Е.
Розпочнемо проектування системи з локального випадку, тому перший спосіб використання, що передбачає наявність локальної мережі, реалізовувати не будемо.
Другий спосіб використання –
категоризації виконуваних файлів прикладного
програмного забезпечення передбачає
асоціацію кожного імені виконуваного
файлу з тією чи іншою категорією. Згідно
з структурою програмного забезпечення,
що була спроектованою в параграфі 2.2 і
представлена в таблиці додатку Б, слід
створити перелічуваний тип Category. З цією
метою необхідно створити нову папку в
контейнері веб-додатків: „C:\Program Files\Apache
Software Foundation\Tomcat 6.0\webapps\CompResAnalyseApp\
Для перевірки функціонування алгоритму категоризації використаємо протокол нагромаджених спостережень за користуванням комп’ютерними ресурсами, що наведений в додатку Ж.
З кожною прикладною програмою (ресурсом) асоціюється його категорія і ці дані зберігаються у базу даних. Сервером баз даних обрано MYSQL, оскільки він поширюється на основі безкоштовної ліцензії і його сучасні версії не надто сильно поступаються комерційним СУБД, таким як MS SQL чи Oracle.
Асоціацію назви виконуваного файлу з ресурсом здійснимо за допомогою класів Application, ApplicationCollection та ConnectionBean, текст реалізації яких знаходиться в додатку Е). Оскільки категоризація вимагає створення бази даних і таблиці додатків, то таку базу даних ми створимо, запустивши на виконання клієнт для роботи з MYSQL виконавши з командного рядка: mysql –u root, тобто доступ до бази даних під адміністратором. Після виконання цієї команди появляється вікно терміналу рис. 3.4.
Рисунок 3.4 – Вікно клієнта MYSQL для адміністрування баз даних
Після появи цього вікна виконаємо наступний скрипт створення бази даних і таблиці додатків, скопіювавши і вставивши його з буферу обміну:
create database CompResAnalyseDB;
use CompResAnalyseDB;
create table application (exe text, category text, primary key(exe));
В результаті його виконання отримано наступний протокол створення:
mysql> create database CompResAnalyseDB;
Query OK, 1 row affected (0.01 sec)
mysql> use CompResAnalyseDB;
Database changed
mysql> create table application (exe text, category text, primary key(exe));
ERROR 1170 (42000): BLOB/TEXT column 'exe' used in key specification without a key length
Отже операція створення бази даних CompResAnalyseDB була успішною, тоді як операція створення таблиці application завершилася з помилкою. Помилка виникла внаслідок того, що тип text не підходить для ключів. Цю помилку усунено заміщенням типу даних на varchar необхідної довжини:
mysql> use CompResAnalyseDB;
Database changed
mysql> create table application (exe varchar(255), category varchar(100), primar
y key(exe));
Query OK, 0 rows affected (0.06 sec)
Тепер таблицю створено успішно. Отримання стрічок з назвами ресурсів (виконуваних файлів) з протоколу Ж здійснено у файлі soft_categorization.jsp, наступним чином:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/
<%-- Запис у базу
даних має бути перед
<jsp:useBean id="ac" class="ra.
<%
ac.fillDB();
%>
<html>
<%-- Це також коментар. В useBean властивість scope буває page, request, session, application --%>
<% ac.readFromDB(); %>
<table border="1" width="100%">
<c:forEach var="anApplication" items="${ac}">
<tr>
<td>${anApplication.category}<
<td>${anApplication.exeFile}</
</tr>
</c:forEach>
</table>
</html>
До проекту додано також службовий клас зв’язку з базою даних ConnectionBean, його код також знаходиться у додатку Е.
Компіляція класів Category, Application,
ApplicationCollection та ConnectionBean була виконана
за допомогою оператора javac *.java з командного
рядка і відбулася успішно. Проте вибір
у вікні рис.3.3 способу використання категоризації
призведе до помилки часу виконання: „HTTP
Status 500 - type Exception report message description The server encountered
an internal error () that prevented it from fulfilling this request.
exception org.apache.jasper.
Вищезгадана помилка є наслідком того, що контейнер веб-додатків Томкат 6.0 вимагає перезапуску свого середовища (див. рис. 3.1) для того, щоб новостворені класи додатку стали йому доступні. Тому вікно рис. 3.1 слід закрити і повторно запустити програму tomcat6.exe.
Повторне звернення до пункту меню категоризації призводить до виникнення порожньої сторінки, див. рис. 3.5.
Рисунок 3.5 – Початковий результат виконання категоризації
Перегляд таблиці application за
допомогою команди select * from application дає порожню
множину. Такий ефект викликано тим, що
замість оператора SQL insert було використано
оператор update, який нічого не поновлює,
коли записи у таблиці відсутні. Після
виправлення цієї помилки, а також після
виправлення помилки „org.apache.jasper.
Рисунок 3.6 – Фрагмент списку для категоризації ресурсів (виконуваних файлів)
На початку категоризації усі прикладні програми потрапляють ц невідому категорію (UNKNOWN). Насправді навіть при зміні категорії тієї чи іншої програми перезавантаження сторінки категоризації наново переведе її у категорію UNKNOWN, такий ефект виникає внаслідок того, що оператор ac.fillDB() у файлі soft_categorization.jsp запускається безумовно. Щоб уникнути цього ефекту слід добавити перевірку певної умови при настанні якої посилання його слід було б виконувати. Такою умовою буде перехід на посилання „категоризувати наново”, що передає на поточну сторінку методом GET параметр recategorize=1.
Таблиця 3.1
Список ресурсів (виконуваних файлів прикладних програм), що підлягають категоризації
Початкова категорія |
Ресурс |
Початкова категорія |
Ресурс |
UNKNOWN |
MSDEV.EXE |
UNKNOWN |
TERGEN.EXE |
UNKNOWN |
taskmgr.exe |
UNKNOWN |
VCSPAWN.EXE |
UNKNOWN |
TOTALCMD.EXE |
UNKNOWN |
csrss.exe |
UNKNOWN |
explorer.exe |
UNKNOWN |
spoolsv.exe |
UNKNOWN |
calc.exe |
UNKNOWN |
ACDSee5.exe |
UNKNOWN |
hh.exe |
UNKNOWN |
DjVuSolo.exe |
UNKNOWN |
WINWORD.EXE |
UNKNOWN |
MSOHELP.EXE |
UNKNOWN |
birthdaylist.exe |
UNKNOWN |
sethc.exe |
UNKNOWN |
Lingvo.exe |
UNKNOWN |
SynTPEnh.exe |
UNKNOWN |
cmd.exe |
UNKNOWN |
LvAgent.exe |
UNKNOWN |
chrome.exe |
UNKNOWN |
MovieApp1.exe |
UNKNOWN |
notepad++.exe |
UNKNOWN |
dwwin.exe |
UNKNOWN |
EXCEL.EXE |
UNKNOWN |
rvsim.exe |
UNKNOWN |
rundll32.exe |
UNKNOWN |
sol.exe |
UNKNOWN |
AcroRd32.exe |
UNKNOWN |
helpctr.exe |
UNKNOWN |
audacity.exe |
UNKNOWN |
procexp.exe |
UNKNOWN |
notepad.exe |
UNKNOWN |
WINRAR.EXE |
UNKNOWN |
firefox.exe |
UNKNOWN |
NokiaMServer.exe |
UNKNOWN |
opera.exe |
UNKNOWN |
CNAB4SWK.EXE |
UNKNOWN |
diaw.exe |
UNKNOWN |
FineReader.exe |
UNKNOWN |
MATLAB.exe |
UNKNOWN |
wmplayer.exe |
UNKNOWN |
POWERPNT.EXE |