serverApplication.py

このプログラムは、Bokehサーバー上で実行される2つの時系列プロットを起動します。 このサーバは、データ生成クライアントから更新されているときにGridDBからデータを流します。

データの可視化フロー

  • Web server アプリケーションを確立する
  • コーヒーストア(serverApplication.pyおよびGridstoreMethods.py)の1日分のデータを含む初期の時系列プロットを作成する
  • GridDBからデータを取得し、それをWebページの時系列プロットに挿入する
  • 定期的なコールバックを使用して、ユーザーの操作に応じて、過去または最近のデータでフロントエンドのグラフを更新する

上段の時系列プロットは、ある瞬間のショット率を表しています。 コーヒーマシンが新しいレコードを作成してGridDBに挿入すると、データ視覚化プログラムはレコード間のタイムスタンプの差を使用して、その時のショットレートを決定します。 たとえば、レコード間の最近のタイムスパンが短くなった時は、ショット率が上昇していることを意味し、グラフ上ではより正のスロープを示します。 プログラムは、GridDBとTQLを使用して、新しい推定ショット率を計算して表示します。

下段の時系列プロットは、喫茶店の各コーヒーマシンの温度を表しています。 各行ごとに1台のコーヒーマシンを表します。 いずれかのプロットを左にパンすると、プログラムはGridDBにクエリーを送信して、過去のデータ(過去のショット率または温度を含む)を取得します。

初期プロットのデータ

プロットは、GridDBの最近のデータに基づいて2つのプロットをロードすることから始まります。 このデータは最大で過去1日分になります。
時系列プロットの各行は、コーヒー店のコレクション内のコーヒーマシンの時系列コンテナを表しています。 そこから、過去の日のタイムスタンプ行をTQLクエリで取得できます。 タイムスタンプ、温度および他のフィールドは、各行から抽出することができ、グラフに追加するデータを計算するために使用できます。

coffee_machine = gridstore.get_container(serial_number)
tql = "select * where timestamp <= NOW() and timestamp >= TIMESTAMPADD(DAY,NOW(),{0}) \       
order by timestamp asc".format(days * -1)

query = coffee_machine.query(tql)
rowSet = query.fetch(False)
row = coffee_machine.create_row()

while rowSet.has_next():
rowSet.get_next(row)
   	timestamp = row.get_field_as_timestamp(0)

過去のショット率を取得するには、

shotRate = GridstoreMethods.get_instantaneous_rate(coffee_machine,int(timestamp))

過去の温度を得るためには、

temperature = row.get_field_as_float(2)

データポイントを追加する

x.append(datetime.fromtimestamp(int(timestamp) / 1000 ))
y.append(temperature)

GridDBからデータポイントが抽出されると、各データポイントは、プロットラインの1つに追加できるデータポイントのx座標とy座標として追加できます。 これらは、プロット図の線のデータソースとなる線のx座標とy座標を形成する2つのリストを作成します。

x, y, machine = get_past_shot_rates(gridstore,serial_nums[idx],1)

shot_line = timeseries.line("x","y",source = ColumnDataSource(data = \
dict(x = x, y = y)), color=LINE_COLORS[idx])

ソースコード

以下のリンクから、データ生成クライアントおよびデータ視覚化コンポーネントのアプリケーションおよびそのソースコードをダウンロードできます。

Download: datavisualisation_application.tar.gz