Приложение мониторинга и представления данных

глава из пояснительной записки к дипломному проекту.

В данной главе подробно рассматривается приложение мониторинга и представления данных.

Выбор языка программирования для реализации

При выборе языка программирования, который был использован для написания приложения, рассматривались следующие критерии:

Тип аппаратной платформы. Приложение должно выполняться на сервере лаборатории нейтронной физики ОИЯИ. В настоящее время в качестве сервера ЛНФ используется компьютер Sun под управлением операционной системы Solaris 2.7, следовательно, приложение должно работать на данной аппаратно-программной платформе. Кроме того, принимая во внимание высокую производительность новых моделей компьютеров, основанных на микропроцессорах фирмы Intel, а так же их относительно невысокую стоимость, необходима возможность использования приложения на таких системах, поскольку вероятно их использование в будущем. При этом желательна возможность легкого переноса приложения с одной платформы на другую.

Работа с физическими данными. В задачу приложения входит обработка физических данных, таких как значение мощности источника, время работы и т.д. Работа с такими данными должна быть выполнена средствами языка программирования с достаточной точностью.

Роль серверного приложения. Программа выполняет задачи, характерные для серверного приложения, такие как взаимодействие с web-сервером, формирование HTML кода, и т.д. Необходимо, чтобы реализация таких функций была предусмотрена создателями языка программирования.

Перечисленным выше требованиям отвечает язык программирования Java. Java является объектно-ориентированным языком программирования, разработанным фирмой Sun Microsystems.

Основные достоинства языка Java:

Основные недостатки языка Java:

Благодаря использованию интерпретатора байт-кода приложения, написанные на языке Java, могут выполняться на различных аппаратно-программных платформах, в том числе на системах, построенных на основе микропроцессоров Intel и SPARC. Интерпретатор языка Java заранее встроен в современные операционные системы.

В Java реализованы необходимые типы данных и математические функции, а так же необходимые для визуализации графические функции.

Данный язык удобен для создания серверных приложений благодаря использованию Java сервлетов и технологии JSP. Помимо этого, язык Java обеспечивает удобный механизм взаимодействия с базами данных, что может быть полезно при дальнейшем развитии информационной системы.

Представление данных

Для организации хранения данных в процессе работы используются специально созданные классы . Далее приводится описание реализованных классов с указанием доступных извне методов и переменных.

Значение мощности. Класс PowerPoint. Данный класс предназначен для хранения данных, полученных в результате одного измерения средней мощности источника. Класс содержит следующие переменные:

Информация, которую содержит экземпляр класса, соответствует строке файла данных о мощности источника.

Набор значений мощности. Класс PowerSet. Назначение класса - сохранение ряда значений мощности и предоставление удобного механизма для последовательного обращения к ним. Помимо этого, класс предусматривает сохранение некоторых характеристик набора, таких как максимальное значение мощности и др. Содержит следующие методы:

Кроме того, класс PowerSet содержит следующие переменные:

Информация, которую содержит экземпляр класса, соответствует файлу данных о мощности источника за цикл.

Состояние нейтронных каналов. Класс BeamState. Данный класс предназначен для хранения данных о состоянии нейтронных каналов, полученных в результате одной регистрации. Класс содержит следующие переменные:

Информация, которую содержит экземпляр класса, соответствует строке файла данных о состоянии каналов.

Набор состояний каналов. Класс BeamSet. Назначение класса - сохранение ряда состояний каналов и предоставление удобного механизма для последовательного обращения к ним. Содержит следующие методы:

Информация, которую содержит экземпляр класса, соответствует файлу данных о состоянии нейтронных каналов за цикл.

Компоненты приложения

Функции приложения распределены между отдельными компонентами. Это позволяет упростить программирование и написать удобный для отладки исходный код. Далее подробно описано назначение каждого компонента.

Компонент загрузки данных. Класс DataSource. Данный компонент предназначен для загрузки необходимой информации из файлов данных и формирования наборов значений мощности (экземпляр класса PowerSet) и состояний нейтронных каналов (экземпляр класса BeamSet). Помимо этого, класс формирует список идентификаторов циклов, данные о которых доступны для представления. Класс DataSource содержит следующие доступные извне методы:

PowerSet getPowerSet(String name) Метод предназначен для формирования набора значений мощности для цикла, имеющего идентификатор, указываемый в параметре метода. В процессе выполнения из файла конфигурации считывается путь к рабочей директории, а из идентификатора цикла формируется имя файла. Затем производится построчное чтение файла данных о мощности источника. При этом из данных, содержащихся в каждой строке, формируется экземпляр класса PowerPoint, который добавляется в набор значений мощности (экземпляр класса PowerSet). После достижения конца файла метод возвращает заполненный набор.

BeamSet getBeamSet(String name) Метод предназначен для формирования набора состояний нейтронных каналов для цикла, имеющего идентификатор, указываемый в параметре метода. Работает аналогично предыдущему методу, за тем исключением, что из каждой строки считанного файла формируется экземпляр класса BeamState, который добавляется в набор значений состояний каналов (экземпляр класса BeamSet).

CycleSet getCycleSet() Метод используется для получения списка идентификаторов цикла, файлы данных которых находятся в рабочей директории. Для этого формируются список файлов данных о мощности и список файлов данных о состоянии каналов. Метод возвращает экземпляр класса, содержащий идентификаторы тех циклов, для которых доступны оба файла.

Компонент графического представления. Класс QuickPlot. Компонент предназначен для формирования графика мощности импульсного источника и диаграммы состояний каналов транспортировки нейтронов. Выполняемая компонентом функция зависит от того, какой конструктор применяется для создания экземпляра класса:

QuickPlot(long min, long max, PowerSet ps, BeamSet bs) создает экземпляр класса, который формирует изображение, содержащее график мощности и диаграмму состояний нейтронных каналов за период времени начиная с min и заканчивая max.

QuickPlot(long min, long max, PowerSet ps) создает экземпляр класса, который формирует изображение, содержащее только график мощности реактора. График представляет данные за период времени начиная с min и заканчивая max.

QuickPlot(long min, long max, BeamSet bs) создает экземпляр класса, который формирует изображение, содержащее только диаграмму состояний нейтронных каналов. График представляет данные за период времени начиная с min и заканчивая max.

В процессе работы компонента в памяти создается графический объект Image построенный на основе цветовой модели RGB с 8 битным представлением каждого цвета.

Для вычисления координат элементов графика и диаграммы производится вычисление отношения отрезка времени (max - min) к горизонтальному размеру графика мощности и диаграммы состояний нейтронных каналов:

s_x = (max - min) / width

где width - ширина графика мощности и диаграммы состояний.

Так же вычисляется отношение диапазона мощности импульсного источника к вертикальному размеру графика:

s_y = power_max / power.height

где power_max - максимальное значение мощности,
power.height - высота графика мощности.

Производится выбор необходимого числа временных меток, необходимых для построения координатной сетки, в зависимости от величины временного диапазона; составление набора, содержащего информацию о позиции каждой метки и текст, обозначающий соответствующие метке дату и время.

Затем выполняется построение границ графика мощности, границ диаграммы состояний нейтронных каналов; построение осей координатной сетки;

При построении графика мощности координаты точек вычисляются по формуле:

X = power.x + (point.date - min) / s_x
Y = power.y + power.height - point.power / s_y

где power.x - отступ границы графика от левого края изображения,
point.date - момент времени, соответствующий точке,
power.y - отступ границы графика от верхнего края изображения,
power.height - высота графика мощности,
point.power - значение мощности источника.

Все действия по созданию изображения производятся во время выполнения метода getImage(int width, int height), который возвращает графический объект Image. В параметрах метода указываются размеры изображения по горизонтали и вертикали соответственно. Это делает компонент довольно универсальным, однако следует заметить, что в том случае, если размер изображения задан относительно небольшим, возможно наложение меток координатной сетки и прочие неприятности. Фактически, на странице приложения мониторинга и представления параметров, используется изображение размером 500 x 500 пикселей.

Компонент мониторинга и представления. Класс DreadBean. Основной компонент приложения. В процессе выполнения производится загрузка данных с помощью компонента DataSource, построение графика мощности и диаграммы состояний нейтронных каналов с помощью компонента QuickPlot. Затем выполняется расчет рабочих параметров, таких как:

Энергия, выделенная реактором, считается равной интегралу от мощности по времени. Фактически для каждого измерения мощности рассчитывается произведение значения мощности в мегаваттах на отрезок времени до следующего измерения, выраженный в часах. Сумма произведений для представленного отрезка времени равняется выделенной энергии в мегаватт часах.

В дальнейшем значения полученных параметров включаются в страницу представления данных status.jsp.

Компонент формирования списка циклов. Класс IndexBean. В процессе выполнения компонента производится загрузка набора циклов, данные о которых доступны для представления, и формирование элементов списка циклов. В дальнейшем список используется в индексной странице index.jsp.

Страница представления данных. Файл status.jsp. Компонент является страницей JSP и содержит HTML разметку и инструкции включения значений параметров из компонента DreadBean. Страница содержит ссылку на компонент формирования изображения.

Страница списка доступных циклов. Файл index.jsp. Компонент является страницей JSP и содержит HTML разметку и инструкции включения элементов списка циклов из компонента IndexBean.

Компонент формирования изображения. image servlet. Компонент предназначен для преобразования объекта Image в графическое изображение формата GIF. Для формирования изображения используется класс GIFOutputStream написанный Кэрри Шетлайном и распространяемый бесплатно.

Рабочий цикл программы

Функции приложения, связанные с формированием страниц в ответ на запросы пользователя, можно условно разделить на две категории:

Далее изложена последовательность действий, выполняемая при обработке запросов вышеуказанных страниц.

Формирование индексной страницы. При формировании индексной страницы параметры запроса не используются. В случае если в запросе присутствуют параметры, они игнорируются. Выполняется следующая последовательность действий:

  1. Считывается список файлов данных в рабочей директории. Создается набор идентификаторов циклов - экземпляр класса CycleSet.
  2. На основе данных, содержащихся в наборе идентификаторов, формируются элементы таблицы.
  3. Элементы таблицы включаются в JSP страницу index.jsp. Полученная HTML страница передается web-серверу для представления пользователю системы.

Передача сформированной страницы пользователю выполняется web-сервером без участия приложения мониторинга и представления данных.

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

Используется стандартный механизм передачи параметров, используемый в работе протокола HTTP [5]. Запрос может содержать следующие параметры:

В случае отсутствия в запросе какого-либо из перечисленных параметров, для отсутствующего запроса принимаются следующие значения по умолчанию:

Таким образом, запрос без параметров подразумевает запрос полной информации о текущем цикле.

Значение идентификатора цикла представляет собой восьмизначное целое число, которое формируется из даты первого измерения, входящего в цикл и позволяет определить названия файлов данных о мощности и состоянии нейтронных каналов.

В процессе формирования страницы представления данных выполняются следующие действия:

  1. Из идентификатора цикла формируются имена файлов данных о мощности и файлов данных о состоянии нейтронных каналов.
  2. Файлы данных соответствующего цикла загружаются с сервера. Формируются экземпляры классов PowerSet и BeamSet.
  3. Выполняется построение графика мощности источника и диаграммы состояний нейтронных каналов. Создается графический объект Image.
  4. Вычисляются основные рабочие параметры источника, такие как время работы, время простоя, выделенная энергия и т. д.
  5. Полученные значения рабочих параметров включаются в JSP страницу status.jsp. Полученный код HTML-страницы передается web-серверу.
  6. Из графического объекта Image формируется графический файл в формате GIF. Полученный файл передается web-серверу.

Передача сформированной HTML-страницы и графического файла пользователю выполняется web-сервером без участия приложения.

Иллюстрация 3.1 содержит блок-схему, на которой представлено взаимодействие компонентов приложения между собой.

Рис. 3.1 Схема взаимодействия компонентов приложения
Рис. 3.1 Схема взаимодействия компонентов приложения

На иллюстрации 3.2 представлена схема преобразования данных в процессе формирования страницы представления рабочих параметров импульсного источника нейтронов.

Рис. 3.2 Схема преобразования данных
Рис. 3.2 Схема преобразования данных

Файл конфигурации программы

Файл конфигурации содержит информацию, необходимую для чтения данных из файлов результатов измерений. Файл имеет название source.properties и содержит следующие параметры:

Каждый параметр задается с начала строки. Значение параметра отделяется от имени символом равенства. Например, строка, содержащая значение параметра кодировки равное iso8859-1 имеет вид:

source.encoding = iso8859-1

Подробно о допустимых значениях параметров указано в руководстве по установке и настройке программы.

Обработка ошибок

Под обработкой ошибок понимается выполнение приложением некоторых действий в случае возникновения нештатной ситуации, такой как, например, неправильные значения параметров запроса, поврежденный файл данных и т. д. В зависимости от типа ошибки целью обработки данной ошибки является либо сообщение пользователю о возникновении ошибки и ее вероятных причинах, либо обеспечение дальнейшего нормального выполнения приложения.

Для решения таких задач используется механизм обработки исключительных ситуаций, встроенный в язык программирования Java [2]. Он позволяет применить одинаковый подход к обработке как ошибок, возникающих в процессе работы встроенных в Java методов, так и логических ошибок работы приложения.

В программе используются следующие классы исключений:

BrowseException Исключение вызывается при возникновении ошибок во время формирования списка доступных для представления циклов. Вызов исключения приводит к возвращению пользователю сообщения, в котором указана причина ошибки.

LoadException Исключение вызывается при возникновении ошибок во время загрузки файла данных в память. Возможные причины следующие:

Вызов исключения приводит к возвращению пользователю сообщения, в котором указана причина ошибки.

ResourceException Исключение вызывается при возникновении ошибок во время считывания параметров из файла конфигурации. Ниже перечислены следующие возможные причины возникновения ошибки:

Вызов исключения приводит к возвращению пользователю сообщения, в котором указана причина ошибки. В случае отсутствия необходимого параметра пользователь получает сообщение об ошибке с указанием параметра.

PaintException Исключение вызывается при возникновении ошибок во время построения графика мощности источника и диаграммы состояний нейтронных каналов.

В случае если нормальное завершение приложения невозможно, пользователь получает сообщение об ошибке вместо данных мониторинга. Пример страницы сообщения об ошибке представлен на иллюстрации 4.4 в главе 4.

глава 2 | содержание | глава 4