«Нет ничего постоянного, кроме изменений», и это особенно верно в отношении информационных технологий. Цифровая трансформация сегодня находится в центре внимания многих организаций. Одна из задач - внедрять инновации и предлагать простое решение, оставаясь при этом взаимосвязанными с унаследованными системами.

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

Допустим, вам нужно знать, как ежедневно меняется нагрузка на компоненты на предприятии Siebel. Как бы вы решить эту проблему?
Если она у вас есть, Oracle Enterprise Manager Cloud Control - хороший способ выполнить мониторинг Siebel и множество других задач. Или вы можете заглянуть в стек ELK или Grafana для отображения графических отчетов. Или просто иметь сводную таблицу в листе Excel, почему бы и нет?

Мой подход к решению этой задачи заключался в использовании web2py (уже развернутого на сервере для другого проекта) и небольшого количества JavaScript.

Как упоминалось на странице проекта, web2py - это бесплатный полнофункциональный фреймворк с открытым исходным кодом для быстрой разработки безопасных веб-приложений на базе баз данных, написанных и программируемых на Python. Это также:

  • занимает мало места, не требует установки или настройки и предоставляет большую часть своих функций (включая IDE с модулями отладчика и администратора базы данных) через веб-интерфейс.
  • предоставляет множество встроенных функций: уровень абстракции базы данных (DAL), функциональность CRUD (создание, получение, обновление, удаление), система форм, управление доступом на основе ролей, планировщик, встроенная вики, различные протоколы, такие как RSS, CSV, JSON, XML и многие другие.
  • его структура побуждает разработчиков разделять представление данных (модель), представление данных (представление) и рабочий процесс приложения (контроллер) - это шаблон MVC. Под капотом URL-адрес / x / y / z сопоставляется с вызовом приложения x, контроллера y.py и функции z в этом контроллере.
  • требует минимальных усилий для создания довольно мощных веб-приложений, управляемых данными. Что не менее важно, это значительно сокращает время обучения (изначально было разработано как средство обучения).
    Смотрите здесь видеокурс от профессора Массимо Ди Пьерро, создателя web2py.

После создания каркаса приложения с помощью web2py следующим шагом было создание визуализации данных на основе источника текста (отчет CSV, созданный некоторыми настраиваемыми сценариями оболочки). Для этого я использовал следующие библиотеки JavaScript: papaParse.js, pivot.js и pivotTable.js.

  • Papa Parse - это быстрый анализатор CSV для JavaScript.
  • Pivot.js - это облегченная сводная таблица JavaScript с открытым исходным кодом, которая умеет суммировать большие наборы данных.
  • PivotTable.js добавляет поддержку перетаскивания в pivot.js. Помимо встроенных средств визуализации таблиц, тепловых карт и гистограмм, PivotTable.js также позволяет создавать диаграммы C3, визуализации D3 или диаграммы Google. На главной странице проекта представлено описание основных параметров и демонстрация исходного кода.

Ниже приведено представление моего URL-адреса envMon / webcon / stats / enterprise / date (application / controller / function / argument1 / argument2):

  • В файле контроллера web2py / applications / envMon / controllers / webcon.py:
from ssh import *
def stats():
    response.subtitle = “Resources Usage for Siebel components”
    fetch_csv(str(request.args[0]), ’webcon’, str(request.args[1]), str(request.args[2]))
    return dict()
  • В файле модуля web2py / applications / envMon / modules / ssh.py:
# Run the shell script to generate the CSV output 
def fetch_csv(env,comp,m,d):
    return subprocess.call(['applications/envMon/static/sh/fetch_csv.sh', env, comp, m, d])
  • В представлении web2py / applications / envMon / views / webcon / stats.html:
{{extend 'layout.html'}}
<link href="{{=URL('static', 'css/pivot.css')}}" rel="stylesheet" type="text/css">
<link href="{{=URL('static', 'css/c3.css')}}" rel="stylesheet" type="text/css">
<script src="{{=URL('static','js/papaparse.min.js')}}"></script>
<script src="{{=URL('static','js/pivot.js')}}"></script>
<script src="{{=URL('static','js/c3_renders.js')}}"></script>
{{include 'webcon/cpu.html'}}
{{include 'webcon/mem.html'}}
{{include 'webcon/tasks.html'}}
  • И в web2py / applications / envMon / views / webcon / tasks.html:
<div id="tskTable">tasks</div>
<script type="text/javascript">
    $(function(c) {
     Papa.parse("{{=URL('static/csv'," % s_webcon_ % s % s.csv " %(request.args[0],request.args[1],request.args[2]))}}", {
      download: true,
      skipEmptyLines: true,
      complete: function(parsed) {
       $("#tskTable").pivot(parsed.data, {
        rows: ["Component"],
        cols: ["Time"],
        aggregator: $.pivotUtilities.aggregatorTemplates.sum()(["Tasks"]),
        aggregatorName: "Number of Tasks",
        renderer: $.pivotUtilities.c3_renderers["Stacked Bar Chart"],
        rendererOptions: {
         c3: {axis: {x: {type: 'timeseries',tick: {format: '%d', culling: {max: 11}, rotate: false} },
     y: {label: "count"} },
   grid: { y: {show: true}}, zoom: {enabled: true},
   bindto: "#tskTable",
   size: { height: 400} } } }); } }); });
 </script>

Заключение

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