Дисковые массивы Storwize компании IBM хорошо известны на рынке, а вот с удобным средством просмотра их конфигурации (тем более, не имея доступа к самому массиву), за исключением программного продукта Total Productivity Center от IBM, уже ничего и нет (perl скрипты svcmon более не поддерживаются). А у сотрудников и, или партнеров, анализирующих конфигурации данных массивов, часто возникает такая потребность. Поэтому, я предлагаю свое решение по просмотру xml файлов конфигурации данных массивов.

В этой статье я опишу, как можно прочитать xml информацию, представить её в виде таблиц, сводную информация на дэшбордах, и все это в виде web-приложения. Как следует из названия статьи – реализовано это на R, с пакетом (фреймворком) для web-приложений к R – Shiny dashboard.

image

Преимущества R


Для просмотра xml файлов конфигурации данных массивов, ранее существовал набор perl скриптов – svcmon, пользоваться которыми было весьма неудобно (необходимо было иметь установленный Perl и PostrgreSQL), да и результат в едином html файле не сильно впечатлял. Поэтому, познакомившись с возможностью парсинга XML файлов с использованием R, да и еще узнав о пакете Shiny Dashboard, решил написать свой парсер с удобной визуализацией и общем доступе, как web приложение.

Как и в моей предыдущей статье достоинства R очевидны, используя только один программный продукт, можно и распарсить файлы, и удобно преобразовывать данные, отображать различные диаграммы, проводить статистический анализ, создать web – приложение, которое можно разместить в открытом доступе, а теперь, с использованием фреймворка Shiny Dashboard, благодаря которому элементы вывода размещаются на дэшбордах, эти приложения становятся еще более красивыми и наглядными.

Последовательность выполнения просмотра xml файлов конфигурации


I. Загрузка xml данных

Загрузка информации осуществляется функцией xmlParse() из пакета. Несмотря на кажущуюся простоту данных xml файлов (объект – значение), пришлось немного повозиться с правильным вытаскиванием всех значений в соответствии со всеми их заголовками. Это осуществляется с использованием функции getNodeSet, в которую необходимо передать xpath, который в свою очередь, формируется конкатенацией всего пути требуемого узла. Разобраться с функциями этого пакета мне помог следующий пост и его автор.

II. Упорядочение данных

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

III. Динамичное управление (Shiny Dashboard)

В отличие от моего предыдущего поста, где интерфейсом служил Shiny, данное средство будет реализовано на Shiny Dashboard. Shiny Dashboard — это расширение пакета (фреймворк) Shiny, для создания дэшбордов в своем web-приложении. Я узнал о нем недавно, и захотелось потренироваться, ну а объект для исследования уже наготове.
В Shiny Dashboard – используются 3 элемента управления:
— заголовок (на который можно поместить 3 кнопки меню — сообщений, уведомления и задач);
— боковая панель (размещаются любые элементы ввода и элементы меню, в том числе и подменю);
— главная панель.

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

Вкратце о реализации и результаты


1. Вначале открывается выбранный пользователем xml файл конфигурации массивов Storwize;
2. После парсинга данного файла (менее 1 секунды), формируются исходные таблицы, на главной странице приводится сводная информация по массиву, в том числе графически;
3. При выборе раздела меню, на основании него формируются соответствующие таблицы;

Ниже приведены некоторые скриншоты моего Shiny Dashboard приложения для просмотра файлов конфигурации, с индивидуальным выбором необходимой таблицы.
Скриншот заглавного окна


Слева боковая панель, в которой загружаем исходный файл, и выбираем таблицу для просмотра, а на главной панели (при выбранном пункте меню Summary), отобразил основные характеристики массива.

Скриншот одного из пунктов меню


А при данном выборе меню (Drive) отображается таблица физических дисков, для нее использовал элемент DataTable (так как дисков много), который позволяет сортировать, фильтровать, искать данные по параметрам.

Почти все реализовано на базовых элементах Shiny, хотя дважды пришлось прибегнуть к CSS. Дэшборды, по своей сути, предназначены для размещения элементов помещающихся в пределах экрана, в моем же случае некоторые таблицы значительно больше, поэтому пришлось переопределять тэг полос прокруток дэшбордов, и учитывая значительное количество элементов меню, также пришлось, используя CSS уменьшать размер элементов меню. Но данные изменения просто описываются в css файле, который необходимо разместить в директории www, и на него указать ссылку в R коде.

Заключение


Продолжая исследовать и попутно популяризировать R, я дополнительно изучил Shiny Dashboard. R весьма удобный инструмент для многих прикладных задач (даже не касаясь статистического анализа), подобной этой, как, по удобству использования, так и по скорости получения результатов. В данном случае, единожды написав данное приложение, впоследствии можно сэкономить сотни часов. Дополнительное использование Shiny (как персонального сервера или облачного сервера) позволит продемонстрировать результаты в более удобной и красивой форме, и значительно увеличить производительность труда.

Комментарии (3)


  1. iscsi
    27.04.2015 12:40

    Планируете открыть код?


  1. Unatine
    28.04.2015 09:01

    Присоединяюсь к iscsi. было бы очень интересно. покрайне мере использовать их для SVC.
    все руки не доходят сделать слив этой инфы в Graphite :/


    1. atikhonov Автор
      28.04.2015 14:33

      Содержательная часть кода всего в 12 строках, вот они:
      xmlfile<-xmlParse(«svc.xml»)
      output.matr<-c()
      string.obj=paste0("//object[@type='",object[i],"']/property")
      xml.struct<-getNodeSet(xmlfile, string.obj)
      name.obj<-sapply(xml.struct, xmlGetAttr, «name»)
      val.obj<-sapply(xml.struct, xmlGetAttr, «value»)
      nameCol<-unique(name.obj)
      ncols < — length(nameCol)
      v_matrix < — matrix(val.obj, ncol=ncols, byrow=TRUE)
      data_wide < — data.frame(v_matrix)
      names(data_wide)<-nameCol
      output.matr[[i]]<-data_wide