Elixir: Kitto, 一个创建仪表盘(Dashboard)的框架

组合潮涌
• 阅读 4467

Kitto 是一个用 Elixir / React 开发的, 帮助你创建仪表盘的框架.

用途

主要用作实时监控服务器的各个运行指标. 比如在一个游戏服务器中,Kitto 通过 SSE(服务器事件流) 连接到管理服务器获取服务器的运行状态指标. 达到实时监控的目的.

Elixir: Kitto, 一个创建仪表盘(Dashboard)的框架

需要的技术

  • React.js

  • Elixir

安装

mix archive.install https://github.com/kittoframework/archives/raw/master/kitto_new-0.2.3.ez

要求

  • Elixir: 1.3

  • Erlang/OTP: 19

创建Dashboard

mix kitto.new <project_name>

部署

安装依赖

mix deps.get && npm install

启动服务器

mix kitto.server

仪表盘网格

Kitto 支持多个仪表盘. 每一个仪表盘用路径 /dashboards/<dashboard_name> 表示.

一个仪表盘是由包含 React 组件的 Gridster 网格构成的

dashboards/sample 目录下有仪表盘的示例代码.

下面的代码片段在仪表盘中放置一个简单的文本组件.

<li data-row="1" data-col="1" data-sizex="2" data-sizey="1">
  <div class="widget-welcome"
       data-widget="Text"
       data-source="text"
       data-title="Hello"
       data-text="This is your shiny new dashboard."
       data-moreinfo="Protip: You can drag the widgets around!"></div>
</li>

最重要的数据属性是:

  • data-widget 选择要使用的Widget.

  • data-source 指定Widget的数据来源.

Jobs (作业)

使用 mix kitto.new <project_name> 创建了一个仪表盘后, 在 jobs/ 目录下存在一些样例作业.

一个作业文件的结构如下:

# File jobs/random.ex
use Kitto.Job.DSL

job :random, every: :second do
  broadcast! :random, %{value: :rand.uniform * 100 |> Float.round}
end

上面的代码会生成一个被监视的(supervised)进程, 这个进程每秒钟生成一个事件.

Widgets

widgets/ 目录中的 Widgets 被 Webpack 自动编译并在仪表盘中加载.

Widget 例子(widgets/text/text.js)

import React from 'react';
import Widget from '../../assets/javascripts/widget';

import './text.scss';

Widget.mount(class Text extends Widget {
  render() {
    return (
      <div className={this.props.className}>
        <h1 className="title">{this.props.title}</h1>
        <h3>{this.state.text || this.props.text}</h3>
        <p className="more-info">{this.props.moreinfo}</p>
      </div>
    );
  }
});

每一个Widget使用data-source属性指定的源更新数据.

部署

编译项目

MIX_ENV=prod mix compile

编译用于产品环境的资源

npm run build

启动服务器

MIX_ENV=prod mix kitto.server

项目附带有两个例子

  • http://localhost:4000/dashboards/sample

  • http://localhost:4000/dashboards/jobs

目录结构

  • assets — 所有在仪表盘中使用的Javascript, CSS文件. 参考webpack.config.js文件了解它们是如何加载的.

  • dashboards — 一个 .html.eex 文件用于描述仪表盘信息.

  • jobs — 数据检索的实现. 用于为Widgets提供数据.

  • lib — 由Job使用的Elixir模块.

  • widgets — 每一个Widget的所有HTML,SCSS,Javascript都放在这里.

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
组合潮涌
组合潮涌
Lv1
思家步月清宵立,忆弟看云白日眠。
文章
3
粉丝
0
获赞
0