macbook上grafana8插件开发入门

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了macbook上grafana8插件开发入门相关的知识,希望对你有一定的参考价值。

参考技术A 1.首先需要在macbook上安装grafana

brew install grafana

2.启动grafana

brew services start grafana

启动后我们需要看插件的目录在哪里。

ps aux|grep grafana

进程信息如下

 /usr/local/opt/grafana/bin/grafana-server --config /usr/local/etc/grafana/grafana.ini --homepath /usr/local/opt/grafana/share/grafana --packaging=brew cfg:default.paths.logs=/usr/local/var/log/grafana cfg:default.paths.data=/usr/local/var/lib/grafana cfg:default.paths.plugins=/usr/local/var/lib/grafana/plugins

可以看到插件目录在/usr/local/var/lib/grafana/plugins 下面,grafana的配置文件是/usr/local/etc/grafana/grafana.ini

我们进入插件目录去开发我们的第一个插件/usr/local/var/lib/grafana/plugins

我们先安装必要的开发工具

brew install npm

npm install -g npx yarn

npx @grafana/toolkit plugin:create my-plugin

选择pannel插件

pluginId要填好,必须是唯一的 这里我们填 my-plugin-123

创建好插件后 

cd my-plugin

可以对生成好的插件脚手架进行修改,脚手架是基于reactJs开发的

yarn install // 安装依赖

yarn dev //注意这一步很重要,这一步会修复lint错误,不执行yarn build 会报错

yarn build 

由于grafana7之后都要求插件进行签名,对不签名的的插件正常情况下是不会加载的,因此我们需要改一下配置文件,

针对我们这个未签名的插件做特殊处理。

vim /usr/local/etc/grafana/grafana.ini

把下面allow_loading_unsigned_plugins配置项的注视去掉并配上

allow_loading_unsigned_plugins = "my-plugin-123"

my-plugin-123是我们创建插件时候输入的插件ID

接着,我们把服务grafana的服务重启就可以看到我们创建的插件了

brew services restart grafana

输入:http://127.0.0.1:3000/admin/plugins?filterBy=all&filterByType=all&q=my

Grafana,使用外部库开发插件

【中文标题】Grafana,使用外部库开发插件【英文标题】:Grafana, develop plugin using an external library 【发布时间】:2018-07-08 02:37:02 【问题描述】:

大家好。 我正在尝试为 Grafana 开发一个简单的插件。 我已经成功地导入了外部库,现在我对“使用它”感到震惊。

这是我在 domap_ctrl.js 中导入插件的方式:

System.register(['app/plugins/sdk', 'lodash','./datamaps'], function (_export, _context) 
  var PanelCtrl, _, _createClass, panelDefaults, DoMapCtrl, Datamap;

然后我想触发数据映射:

_createClass(DoMapCtrl, [
            
              key: 'updateDoMap',
              value: function updateDoMap() 
                console.log("update: ",this.panel.foo);
                if(document.getElementById('container'))
                    new Datamap(
                      element: document.getElementById("basic")
                    );
                
                this.nextTickPromise = this.$timeout(this.updateDoMap.bind(this), 1000);
              
            ,
            
          key: 'onRender',
          value: function onRender() 
            console.log("onRender",)
          
        
        ]);

但在将面板添加到仪表板时出现此错误:

TypeError: Datamap is not a constructor
    at DoMapCtrl.updateDoMap (domap_ctrl.js:92)
    at angular.js:20440
    at i (angular.js:6362)
    at angular.js:6642
(anonymous) @ angular.js:14700
(anonymous) @ angular.js:11142
(anonymous) @ angular.js:20443
i @ angular.js:6362
(anonymous) @ angular.js:6642
setTimeout (async)
c.defer @ angular.js:6640
o @ angular.js:20438
updateDoMap @ domap_ctrl.js:96
DoMapCtrl @ domap_ctrl.js:82
s @ angular.js:5040
d.instance @ angular.js:11000
f @ angular.js:9852
s @ angular.js:9174
(anonymous) @ angular.js:9039
v @ module.js:14
y @ module.js:38
(anonymous) @ module.js:44
Promise resolved (async)
link @ module.js:43
(anonymous) @ angular.js:1385
Ae @ angular.js:10545
f @ angular.js:9934
s @ angular.js:9174
f @ angular.js:9928
s @ angular.js:9174
(anonymous) @ angular.js:9039
(anonymous) @ angular.js:9430
r @ angular.js:9217
h @ angular.js:9984
(anonymous) @ angular.js:31499
r @ angular.js:18123
$digest @ angular.js:18261
$apply @ angular.js:18531
(anonymous) @ angular.js:27346
dispatch @ jquery.js:5206
g.handle @ jquery.js:5014
12:41:12.796 angular.js:14700 TypeError: Datamap is not a constructor
    at DoMapCtrl.updateDoMap (domap_ctrl.js:92)
    at angular.js:20440
    at i (angular.js:6362)
    at angular.js:6642 "Possibly unhandled rejection: "

我该如何解决?提前感谢您的帮助。

【问题讨论】:

为什么不在源文件中使用打字稿等使用import * as Datamap from './datamaps' 【参考方案1】:

即使不建议直接在 dist 文件夹中编辑 Grafana 插件(或不从 Typescript 转译)...

要导入您的库,您还需要修改提供依赖项注入的 setters 函数:

return 
    setters: [
    function (_lodash) 
        // example for Lodash library
        _ = _lodash.default;
    , function (_moment) 
        // example for Moment.js library
        moment = _moment.default;
    , function (datamap) 
        // your library
        Datamap = datamap;
    ],
    ...

【讨论】:

以上是关于macbook上grafana8插件开发入门的主要内容,如果未能解决你的问题,请参考以下文章

如何在Macbook上安装MySQL

idea插件开发- hello world

mac 开发FFmpeg入门

程序员入门必备的大数据开发实战系列丛书

Vue插件开发入门

初学iPad开发入门