Git Product home page Git Product logo

eye's Introduction

EYE

EYE is a developped for monitoring agent for distributed enviroment

Supported Protocol

  • ICMP
  • BACnet

Install EYED

You can easily install EYED by pip command from Github repositry.

pip install git+https://github.com/ThousandMileEye/eye.git

How to use?

Please see the following documentation.

eye's People

Contributors

eternalharvest avatar naoyasawada avatar

Watchers

 avatar  avatar  avatar

Forkers

eternalharvest

eye's Issues

プロキシ機能 の コマンドライン統合

クローズ要件

  • プロキシ機能をコマンドラインから利用できるようにする
  • シミュレータ機能にプロキシ機能を統合

実装準備 (シミュレータ機能にプロキシ機能を統合)

  • DataStore に データ種別の導入
  • 計測値をDataStoreに保存

プロパティの追加が出来ない問題

事例

コマンドラインからプロパティを追加しようとした際にバグが発生

AssertionError: (<type 'exceptions.TypeError'>, TypeError('addBACnetProperty() takes exactly 5 arguments (4 given)',), <traceback object at 0x105fed098>)

インストールに失敗する (バージョン 0.5以前)

症状

Import Error: can not import name LocalDeviceObject 
from bacpypes.service.device import LocalDeviceObject 

原因

  • BACpypes の 最新版リリース (0.16.7 -> 0.17.0) の変更から影響を受けている
BACpypes applications must change from this:
from bacpypes.service.device import LocalDeviceObject

        ↓

from bacpypes.local.device import LocalDeviceObject

過去のバージョンを引き続き利用するため

過去のバージョンを引き続き利用するためには、requiremnets.txtでbacpypesのバージョンを下げてインストールする必要がある。

参考文献

ログの表示を修正

クローズ要件

  • デバッグログを標準出力に出している場合、例外にしている場合の対応を実施
  • rpc/bacnet/bacnet.py の 対応

サービス管理機能 の コマンド名修正

サービス管理機能のコマンド名修正

  • サービスのコントロール機能は以下のように修正する
start bacnetd  -> start service bacnetd
stop bacnetd   -> stop service bacnetd
status bacnetd -> show service bacnetd

既存RPC機能をAPI化

システム関連

自動起動

  • httpdを起動した際に、bacnetdを起動するように修正

STEP1 [済]

  • バージョンの取得機能追加
  • NIC情報の取得機能 (テストケース作成済み)

STEP2 [済]

  • BACnetd の 起動
  • BACnetd の 停止

STEP3

  • BACnet deviceのスキャン
  • device の 取得

テストケースが失敗する

デーモンに接続が出来ない

自動起動の際にデータベースのスキーマをアップデートするように変更したため、起動が遅くなったと考えられるので、travisのテスト実行時間の修正

関連

  • データベーススキーマを自動で更新するように変更 #50

eyed サービスのデーモン化

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from setuptools import setup, find_packages

def _load_requires_from_file(filepath):
	return [pkg_name.rstrip('\n') for pkg_name in open(filepath).readlines()]

def _install_requires():
	return _load_requires_from_file('requirements.txt')

#
# Entry point
#
if __name__ == '__main__':
	setup(
		#
		# Software Information
		#
		name		= 'eyed',
		version		= '0.2.4',

		#
		# Author Information
		#
		author		= 'Naoya Sawada',
		author_email	= '[email protected]',

		#
		# Package Information
		#
		packages		= find_packages(),
		install_requires	= _install_requires(),

		#
		# Console Scripts
		#
		entry_points		= '''
		[console_scripts]
		eyed = eyed.httpd:start
		'''
	)

BACnetd が 起動していない場合の動作処理追加

機能追加

  • デバイススキャン機能 (BACnetd 起動チェック実装済み)
  • デバイスリスト機能 (BACnetd 起動チェック実装済み)
  • bacrp 機能 (BACnetd 起動チェック実装済み)
  • bacepics 機能 (BACnetd 起動チェック実装済み)

[BACnet シミュレータ] スタッティクポイントの追加

静的ポイントの登録機能の追加

eye set bacnet object [object_name] [object_id] [instance_id] [property_id]

課題

  • 2重登録の防止機能 [実装済み]
  • 値の設定機能 [実装済み]
  • 設定情報の確認機能 [実装済み]
  • デフォルト値の設定機能 [実装済み]

[CLI] コマンド名の見直し

クローズ要件

 機能をグループ化した場合に、コマンド名がグループレベルに属さない場合があり、一貫性のないコマンドがいくつか存在するので、変更を行い統一を行う。

計測機能

  • add measurement taskgroup
  • add measurement task
  • add measurement task bacnet
  • show measurement taskgroup
  • show measurement bacnet
  • show measurement bacnet values
  • show measurement tasks

シミュレータ機能

  • add simulation
  • add simulation bacnet
  • add simulation bacnet object
  • add simulation bacnet property
  • set simulation bacnet static property
  • show simulation bacnet
  • show simulation objects
  • show simulation bacnet log

システム情報の確認機能

  • show version
  • show interfaces

制御機能

  • show bacnet scan
  • show bacnet devices
  • run bacepics
  • run bacrp

サービス管理機能 ( #44 )

  • start bacnetd
  • stop bacnetd
  • status bacnetd

[CLI] バージョンの確認機能の追加

バージョンの確認用のサンプルコード

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pkg_resources import get_distribution
version = get_distribution('eyed').version

[API] API の 設計

システム関連

バージョン取得

/api/v1/system/version

NIC情報取得

/api/v1/system/network_interfaces/

計測機能関連

/api/v1/measurement/taskgroups/
/api/v1/measurement/tasks/

デーモン管理機能

/api/v1/services/

BACnetdの起動・停止

/api/v1/service/bacnetd

BACnet デバイスのスキャン

/api/v1/service/bacnet/device/

計測用機能の追加

クローズ要件

  • タスクグループの確認機能の追加
$ eye show measurement taskgroups
  • タスクの確認機能の追加
$ eye show measurement bacnet tasks [taskgroup_name]
  • 測定結果のDB保存機能の実装
    (保存はされているが確認方法がない)

コマンド体系の見直し

サービス起動

  • start
    -- start bacnetd
    -- start proxyd

サービス状況確認

  • status
    -- status bacnetd

サービス停止

  • stop
    -- stop bacnetd

コマンド実行

  • run
    -- run bacepics
    -- run bacrp

パラメータの確認

  • show
    -- show interfaces
    -- show bacnet devices
    -- show bacnet scan

HTTP ベースから RPCベースに移行

EYEDコマンドの移行

  • eyed コマンドを移行しhttpベースのものからRPCベースに行こうする
  • DB設定に問題が障じないかを確認する

関連

バグ

  • 実行する場所が異なる事で、SQLiteのDBファイルが読み込めなくなる問題 #9

大量の接続要求に耐える事が出来るかを確認する

クローズ要件

  • 複数のスレッドから利用する事が可能である事を確認する

確認結果

  • 1秒間に 60pt 以上を実行する場合には厳しい可能性がある
  • セッション数が問題となることはないように見える

関連

  • 大量の接続要求への対応 #4

大量の接続要求への対応

課題

  • HTTPアクセスを使用する場合には、大量のセッションを貼る必要があるためTCPセッションを一つで行えるようにする

GIthub Pages の 活用

Github Pages の 使用

クローズ要件

  • Github Pages の ドキュメント用ディレクトリをマスターブランチ内のdocsディレクトリを使用するように変更
  • ドキュメント の CSS 崩れを修正

Github Pageの使い方 (Jekyllを使わないようする)

マスターブランチの場合

マスターブランチのdocsフォルダの場合

BACnet デバイスを検索出来ない問題

症状

BACnet デバイスを検索した場合に、見つからない場合がある

対策

  • デフォルトのデバイスID の 変更 (65535 -> 2018)
  • BACnet デバイスの検索用範囲の拡大 (2000 -> 65535)

プロキシ機能の実装について

プロキシの実装について

プロキシの実装には、①リクエストを宛先のセンサ情報を持つBACnetデバイスに転送する方法、②値をあらかじむ取得しておき代理応答する方式がある。当初①の方式で実装を行ったが、リクエストの応答に時間がかかる場合には、再送が発生しどんどんリクエストの応答が遅くなり結局データを取得できなくなるという事象が発生した。そのため②の方式をとることにした。
screen shot 2018-02-21 at 19 32 26

ファイル

travis ci の 導入

TODO

  • travis ci の チュートリアル実施

結果

  • travis ci では個人レポジトリ以外の導入には、課金が必要である。そのため導入の延期する。
  • 問題なく導入できた

BACnet CLI 機能のスケジュール作成

機能一覧

全般

  • NIC 一覧取得機能 [実装済み]
(eye) NaoyanoMac-mini:eyed naoya$ eye show interfaces

BACnetd の 制御

  • デーモンの起動 [実装済み]
(eye) NaoyanoMac-mini:eyed naoya$ eye start bacnetd en0
  • デーモンの停止 [実装済み]
(eye) NaoyanoMac-mini:eyed naoya$ eye stop bacnetd
  • デーモンの状態確認 [実装済み]
(eye) NaoyanoMac-mini:eyed naoya$ eye status bacnetd

BACnet の 操作

  • BACnet デバイス一覧の取得 [実装済み]
(eye) NaoyanoMac-mini:eyed naoya$ eye show bacnet devices
[{'ip': '10.2.10.31', 'device_id':  #1234}]
  • BACnet デバイスへのWhoISRequest [実装済み]
(eye) NaoyanoMac-mini:eyed naoya$ eye show bacnet scan
{'device_id': 1234}
  • BACnet デバイスの情報取得 [実装済み]
(eye) NaoyanoMac-mini:eyed naoya$ eye run bacepics 1234
  • BACnet デバイスへの ReadPropertyRequest の送信 [実装済み]
(eye) NaoyanoMac-mini:eyed naoya$ eye run bacrp 1234 2 0 85
{'value': 26.921215057373047}

関連

  • 設定用のコマンドラインを追加 #11

依存関係またはソースファイルの欠如

Abstract

クリーンな virtualenv 環境にて eyed コマンドの実行ができない。

How to reproduce

コードベースのルートで以下のコマンドを実行する。

virtualenv .
source bin/activate
python setup develop.py
eyed

Actual behaviour

  • 以下のエラーが出て eyed が起動できない
Traceback (most recent call last):
  File "/home/takuya/work/eye/bin/eyed", line 11, in <module>
    load_entry_point('eyed', 'console_scripts', 'eyed')()
  File "/home/takuya/work/eye/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 561, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/home/takuya/work/eye/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2631, in load_entry_point
    return ep.load()
  File "/home/takuya/work/eye/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2291, in load
    return self.resolve()
  File "/home/takuya/work/eye/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2297, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/home/takuya/work/eye/eyed/__init__.py", line 4, in <module>
    import model
  File "/home/takuya/work/eye/eyed/model/__init__.py", line 6, in <module>
    from log import BACnetSimulationLog, BACnetMeasurementLog
ImportError: No module named log

Expected behaviour

  • エラーを伴わず eyed が起動できる

CLI コマンド実行時に `socket.error` が発生する

Abstract

ソケットエラーによって CLI コマンドが正常に実行できない。

Pre-requisite

  • Ubuntu 17.10 (Artful Aardvark) x86_64
  • Python 2.7.14

Actual Result

  • socket.error: [Errno 111] Connection refused
(eye) takuya@localhost:~/work/eye$ eye show interfaces
Traceback (most recent call last):
  File "/home/takuya/work/eye/bin/eye", line 11, in <module>
    load_entry_point('eyed', 'console_scripts', 'eye')()
  File "/home/takuya/work/eye/eyed/cli.py", line 636, in start_cli
    cmd(obj = {})
  File "/home/takuya/work/eye/local/lib/python2.7/site-packages/click-6.7-py2.7.egg/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/home/takuya/work/eye/local/lib/python2.7/site-packages/click-6.7-py2.7.egg/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/home/takuya/work/eye/local/lib/python2.7/site-packages/click-6.7-py2.7.egg/click/core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/takuya/work/eye/local/lib/python2.7/site-packages/click-6.7-py2.7.egg/click/core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/takuya/work/eye/local/lib/python2.7/site-packages/click-6.7-py2.7.egg/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/takuya/work/eye/local/lib/python2.7/site-packages/click-6.7-py2.7.egg/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/home/takuya/work/eye/local/lib/python2.7/site-packages/click-6.7-py2.7.egg/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/takuya/work/eye/eyed/cli.py", line 269, in show_interfaces
    client = RPCClient(host, port)
  File "/home/takuya/work/eye/eyed/client/rpc/client.py", line 14, in __init__
    self.connection = rpyc.connect(host, port)
  File "/home/takuya/work/eye/local/lib/python2.7/site-packages/rpyc-3.4.4-py2.7.egg/rpyc/utils/factory.py", line 90, in connect
    s = SocketStream.connect(host, port, ipv6 = ipv6, keepalive = keepalive)
  File "/home/takuya/work/eye/local/lib/python2.7/site-packages/rpyc-3.4.4-py2.7.egg/rpyc/core/stream.py", line 150, in connect
    return cls(cls._connect(host, port, **kwargs))
  File "/home/takuya/work/eye/local/lib/python2.7/site-packages/rpyc-3.4.4-py2.7.egg/rpyc/core/stream.py", line 108, in _connect
    s.connect(sockaddr)
  File "/usr/lib/python2.7/socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 111] Connection refused

Expected result

  • インターフェイス一覧が列挙される

サービスの状況を確認できるようにする

クローズ要件

  • サービスの状況を確認できるコマンドに現在利用しているインターフェースを確認できるようにする

関連

  • インタフェースを選択してBACnetデーモンを起動する方法の提供 #1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.