Программный комплекс для анализа состояния
системы хранения данных EMC Centera
Техническое задание
Р.П.68124-01
Листов 2
Аннотация
Приведены требования к разрабатываемой программе.
Основание для разработки
Основанием для разработки программного комплекса является задание по дипломному проектированию, утвержденное заведующим кафедрой компьютерных систем и программных технологий СПбГПУ 1 июня 2011 года.
Назначение
Программный комплекс предназначен для автоматизации процессов сбора и анализа данных о состоянии системы хранения данных EMC Centera.
Требования к программе
Функциональные требования
Программный комплекс должен должен в зависимости от команды пользователя собирать и/или анализировать информацию о состоянии СХД Centera, после чего представлять пользователю результаты сбора/анализа этой информации.
Требования к функциональным характеристикам
Программный комплекс должен предоставлять возможности по сбору информацию о состоянии СХД Centera и сохранении этой информации локально на рабочей станции пользователя:
Содержимое выбранных пользователем системных журналов
Содержимое отладочных системных журналов, созданных по заданным пользователем параметрам (минимальный уровень важности сообщений журнала, системный компонент, настройки фильтрации текста сообщений)
Текущую конфигурацию кластера
Программный комплекс должен предоставлять возможности по анализу информации о состоянии СХД Centera и сохранению результатов анализа локально на рабочей станции пользователя:
Выбранных пользователем системных журналов на вхождение в них записей с заданными пользователем параметрами (время, системный компонент, фрагмент сообщения)
Сетевого трафика узлов СХД Centera на вхождение сетвых пакетов с заданными пользователем параметрами (сетевой интерфейс, настройки фильтрации сетевых пакетов согласно синтаксису программной библиотеки Pcap)
Содержимого сетевых пакетов типа SmartPacket проприетарного протокола сетевого взаимодействия СХД Centera
Представление содержимого указанного пользователем файла в системе исчисления с основанием 64 (Base64), а также обратное преобразование
Сжатие содержимого указанного пользователем файла, используя алгоритм сжатия по умолчанию программной библиотеки ZLib, а также обратную операцию разжатия
Требования к составу и параметрам технических средств
Для использования программы требуется совместимый с IBM/PC компьютер, на котором можно использовать ОС Microsoft Windows XP Service Pack 2 или 3; а также СХД Centera с версией ПО не ниже 4.0
Требования к информационной и программной совместимости
Программа предназначена для использования в операционной системе Microsoft Windows XP Service Pack 2 или 3 с установленным пакетом Java Runtime Environment версии не ниже 6.
Приложение 2
Программный комплекс для анализа состояния
системы хранения данных EMC Centera
Текст программы
Р.П.68124-01.12
Листов 5
Аннотация
В данном приложении приведён текст программы для анализа состояния системы хранения данных EMC Centera.
Текст программы
Полный текст программы приведён на прилагающемся носителе на оптическом диске, в данном приложении цитируется лишь часть текста программы, демонстрирующая общий стиль и оформление исходного кода программного комплекса.
package common.params;java.io.StringWriter;javax.xml.transform.Result;javax.xml.transform.Source;javax.xml.transform.Transformer;javax.xml.transform.TransformerConfigurationException;javax.xml.transform.TransformerException;javax.xml.transform.TransformerFactory;javax.xml.transform.dom.DOMSource;javax.xml.transform.stream.StreamResult;org.w3c.dom.Document;org.w3c.dom.Element;org.w3c.dom.NamedNodeMap;org.w3c.dom.Node;org.w3c.dom.NodeList;com.sun.org.apache.xerces.internal.dom.DocumentImpl;
/**
* Implementation of XML-wrapping class.
* Intended for usage as parameters bucket.
*
* @author buinok
*/class ParamsImpl implements Params {
// default name of root tag in wrapped XML documentstatic final String PARAMETERS_ROOT_DEFAULT = "parameters";
// tag name holding simple [name:value] pairstatic final String PARAMETER = "parameter";static final String PARAMETER_NAME = "name";static final String PARAMETER_VALUE = "value";
// XML document owning child tags which are wrapped by this class Document document;
// root element of XML documentElement root;
/**
* Constructor creates new parameters bucket where
* its content is duplicated from XML node's content
* @param node - source of content for parameters bucket
*/ParamsImpl(Node node) {= new DocumentImpl();(node == null) {= document.createElement(PARAMETERS_ROOT_DEFAULT);.appendChild(root);
} else {.appendChild(document.importNode(node, true));= document.getDocumentElement();
}
}
/**
* Default constructor. Creates empty parameters bucket
* with default root tag name
*/ParamsImpl() {= new DocumentImpl();= document.createElement(PARAMETERS_ROOT_DEFAULT);.appendChild(root);
}
/**
* De-facto copy constructor. Creates new parameters bucket
* then fill it by duplicated content of @param params argument
*/ParamsImpl(Params params) {= new DocumentImpl();(params == null) {= document.createElement(PARAMETERS_ROOT_DEFAULT);.appendChild(root);
} else {.appendChild(document.importNode(params.getXmlContent(),true));= document.getDocumentElement();
}
}
/**
* Sets name of root tag to @param name if it's not null,
* otherwise just ignores call
*/
@Overridevoid setName(String name) {(name != null).renameNode(root, null, name);
}
/**
* Tries to get String value of parameter with specified @param name
* @return String value if it exists in parameters bucket
* @throws ParamsException if there is a corruption in wrapped
* XML document
* @throws ParamsException if there are no parameters with specified @param name
*/
@OverrideString getString(String name) throws ParamsException {(name == null)new ParamsException("Invalid parameter name ["+name+"]");
// enumerate through all tags with endpoint parameterslist = root.getElementsByTagName(PARAMETER);(int index = 0; index < list.getLength(); index++) {attributes = list.item(index).getAttributes();
// check only tags with existing attributes(attributes != null) {
// try to find name attributenameAttribute = attributes.getNamedItem(PARAMETER_NAME);(nameAttribute == null)new ParamsException("Missing parameter name");nameString = nameAttribute.getNodeValue();(nameString == null)new ParamsException("Void parameter name");(!nameString.equals(name));
// try to find value attributevalueAttribute = attributes.getNamedItem(PARAMETER_VALUE);(valueAttribute == null)new ParamsException("Missing parameter value");valueString = valueAttribute.getNodeValue();(valueString == null)new ParamsException("Void parameter value");valueString;
}
}new ParamsException("There is no parameter ["+name+"]");
}
/**
* Store string parameter into bucket
* @param name - name to store parameter with
* @param value - value of stored parameter
*/
@Overridevoid putString(String name, String value) {(name == null || value == null)new IllegalArgumentException("name ["+name+
"] and value ["+value+"] are mandatory");node = document.createElement(PARAMETER);.setAttribute(PARAMETER_NAME, name);.setAttribute(PARAMETER_VALUE, value);.appendChild(node);
}
/**
* Stores parameters bucket as a parameter for another bucket.
* All nodes of stored bucket are duplicated
* @param name - name to store parameter with
* @param params - content of stored parameters bucket
*/
@Overridevoid putParams(String name, Params params) {(name == null || params == null)new IllegalArgumentException("name ["+name+
"] and parameter ["+params+"] are mandatory");node = document.createElement(name);xmlContent = params.getXmlContent();list = xmlContent.getChildNodes();(int nodeIndex = 0; nodeIndex < list.getLength(); nodeIndex++) {.appendChild(document.importNode(list.item(nodeIndex),true));
}.appendChild(node);
}
/**
* Returns all parameters buckets which are stored under actual one
* @param - name of all parameters bucket to retrieve
*/
@OverrideParams[] getAllParamsWithName(String name) {(name == null)new IllegalArgumentException("name ["+name+
"] is mandatory");list = root.getElementsByTagName(name);
[] paramsArray = new Params[list.getLength()];(int index = 0; index < list.getLength(); index++) {[index] = new ParamsImpl(list.item(index));
}
paramsArray;
}
/**
* Return root wrapped XML tag
*/
@Overridefinal Element getXmlContent() {root;
}
/**
* Implements standard method to serialize hits object to String
*/
@OverrideString toString() {factory = TransformerFactory.newInstance();{transformer = factory.newTransformer();source = new DOMSource(document);writer = new StringWriter();result = new StreamResult(writer);.transform(source, result);writer.toString();
} catch (TransformerConfigurationException e) {.printStackTrace();
} catch (TransformerException e) {.printStackTrace();
}null;
}
}
Приложение 3
Программный комплекс для анализа состояния
системы хранения данных EMC Centera
Описание программы
Р.П.68124-01.13
Листов 3
Аннотация
Приводится краткая характеристика основных параметров программы, её структурное описание и условия её работоспособности
Общие сведения
Программа выполняет ряд задач:
производит поиск заданного шаблона сообщения в журналах событий системы хранения данных EMC Centera;
производит отладочное журналирование событий по заданным параметрам;
производит перехват и журналирование пакетов сетевого трафика c заданными параметрами фильтрации;
производит поиск и копирование указанных данных с узлов кластера EMC Centera на рабочую станцию пользователя;
производит кодирование и декодирование набора байтов, используя алгоритм Base64;
производит декодирование содержимого пакетов сетевого трафика типа SmartPacket;
производит сжатие и декомпрессию набора байтов, используя алгоритм ZLib.
Функциональное назначение
Программа предназначена для автоматизированного сбора и анализа данных о состоянии системы хранения данных EMC Centera. Полученные данные позволяют оперативно получить информацию о причинах сбоя и его последствиях.
Описание структуры программы
Программа является клиент-серверным программным комплексом, реализованным в стиле ООП на языке Java.
Серверный компонент представляет собой набор классов, осуществляющих следующие действия:
Открытие файлов пользовательских запросов и представление их в виде объектов задач
Выполнение считанных задач
Сериализацию объектов задач с результатами в файлы результатов
Клиентский компонент представляет собой набор классов, осуществляющих следующие действия:
Предоставление пользователю графического интерфейса для создания задач и просмотра результатов их выполнения
Сериализацию объектов пользовательских запросов в файл с последующей пересылкой их на узел СХД Centera для обработки серверным копмонентом
Копирование с узла СХД Centera результатов выполнения пользовательских задач с последующей десериализацией в объекты задач с результатами выполнения
Вызов и загрузка
Для создания и выполнения запросов пользователя требуется запустить клиентский компонент на рабочей станции пользователя и используя графический интерфейс указать параметры соединения с узлом СХД Centera, после чего клиентский компонент соединится с узлом СХД, скопирует на него серверный компонент и запустит его удалённо; после этих действий пользователь может создавать свои запросы используя графический интерфейс.
Входные и выходные данные
Входными данными для программного комплекса являются параметры пользовательских запросов, сообщаемые программе через графический интерфейс; выходными данными являются результаты выполнения запроса:
Поиск в журналах. Входные данные - список узлов СХД для поиска, временной интервал, типы журналов и шаблон сообщения. Выходные данные - список всех событий СХД, соответствующих заданным параметра поиска.
Создание отладочных журналов. Входные данные - параметры создания отладочного журнала, список узлов СХД, на которых будет генерировать отладочный журнал. Выходные данные - отладочные журналы заданной конфигурации на указанных узлах СХД.
Перехват сетевого трафика. Входные параметры - список узлов СХД, участвующих в перехвате и параметры фильтрации сетевых пакетов. Выходные данные - журналы сетевого трафика с указанными сетевыми пакетами в формате библиотеки LibPcap на указанных узлах СХД.
Копирование файлов с кластера Centera. Входные параметры - список файлов для копирования, размещённых на узлах СХД. Выходные данные - копия указанных данных на рабочей станции пользователя.
Анализ сетевых пакетов SmartPacket. Взодные данные - содержимое сетевого пакета типа SmartPacket. Выходные данные - текстовое представление всех полей пакета с указанием мнемонических констант.
Используемые технические средства
Для использования программы необходима рабочая
станция с ОС Windows XP SP2 или SP3; установленным пакетом Java Runtime
Environment 6.0; подключением по сети к узлу СХД Centera, используя протокол
TCP; СХД Centera с версией ПО не ниже 4.0.
Приложение 4
Программный комплекс для анализа состояния
системы хранения данных EMC Centera
Программа и методика испытаний
Р.П.68124-01.51
Листов 5
Аннотация
Разработана и проведена методика испытаний программного продукта с целью проверки правильности его работы и корректности получаемых результатов.
Объект испытаний
Программный комплекс для анализа состояния системы хранения данных EMC Centera.
Цель испытаний
Удостовериться в соответствии программы техническому заданию.
Программа испытаний
Программа испытаний всключает в себя создание набора задач, задействующих все функциональные возможности разработанного программного комплекса.
Методика испытаний
Для каждой функциональной возможности была выбрана собственная методика испытаний. Доступ к узлам СХД осуществлялся с помощью утилиты PuTTY.
Поиск шаблона в системных журналах СХД
Для данного испытания были сконфигурированы два разных набора параметров поиска, отличающиеся только типами журналов, в которых производиться поиск:
Дата начала временного интервала: 25.05.2011
Дата конца временного интервала: 26.05.2011
Список узлов СХД: c001n01,c001n02,c001n04
Типы журналов: Бизнес-логика, программная платформа и ОС (во втором наборе отсутствует ОС)
Использование регулярных выражений в шаблоне: выключено
Шаблон сообщения: «/dev/sda3»
В результате поиска в окно с найденными сообщениями были выведены записи от всех трех компонентов ПО СХД Centera об ошибках чтения с раздела диска /dev/sda3.
В результате поиска со вторым набором настроек в окно сообщений были выведены те же записи, но отсутствовали записи из журналов ОС.
Анализ полученного результата полностью совпадает с ожидаемым.
Генерирование отладочного журнала СХД
Для данного испытания был задан следующий набор параметров генерирования:
Список узлов СХД: c001n03,c001n04
Минимальный уровень сообщений: Verbose
Список источников сообщений: ReplicationComponent
Список фильтров: не задан
В результате запуска генерации отладочного журнала на указанных узлах начал создаваться отладочный журнал только из сообщений, проходящих заданную фильтрацию.
Перехват сетевого трафика с записью в журнал
Для данного испытания был задан следующий набор параметров генерирования:
Список узлов СХД: c001n01,c001n02
Сетевой интерфейс для перехвата пакетов: eth2
Параметры фильтрации: src host 10.64.88.123 and dst port 623
В результате запуска перехвата сетевых пакетов на указанных узлах начал создаваться журнал с отфильтрованными пакетами IPMI, присланными от узла с адресом 10.64.88.123.
Копирование файлов с СХД на рабочую станцию пользователя
Для первой части данного испытания был задан следующий набор файлов для поиска:
Список узлов: c001n01,c001n02,c001n03,c001n04
Типы данных: журналы бизнес-логики СХД, файлы с перехваченными сетевыми пакетами
Поиск файлов во всех имеющихся сессиях: отключен
В результате поиска были выведены в том числе файлы журналов, сгенерированные в испытаниях, описанных в пп. 5.2 и 5.3 настоящего приложения, которые и были выбраны в качестве набора исходных данных для продолжения испытания.
В результате копирования файлов на тестовую рабочую станцию были созданы абсолютно идентичные копии выбранных файлов, оригиналы которых находятся на узлах СХД. Идентичность проверялась утилитой md5sum.
Кодирование и декодирование алгоритмом Base64
Для данного испытания в качестве набора исходных данных был выбран файл с содержимым сетевого пакета типа SmartPacket.
При проведении испытания содержимое файла было закодировано с помощью Base64 алгоритма, а затем закодированное содержимое подверглось обратному раскодированию.
Параллельно кодирование/декодирование было осуществлено с помощью специализированного веб-сервиса Online Base64, выполняющего данные преобразования.