Table of Contents

更新とユーザーインタラクション

リアルタイムデータによる更新

プログラムは4秒おきにデータベースにデータ更新の問い合わせを行い、データがGridDBに追加されるときにプロットの行に追加します。

for index in range(len(serial_numbers)):
	if len(line_sources[index].data["x"]) > 0:
			last_timestamp = line_sources[index].data["x"][-1]
			…. ## Perform Type checking
			new_rate_times = \ 
			GridstoreMethods.fetch_timestamps_betw(gridstore, \ 
			serial_numbers[index],last_timestamp,GridstoreMethods.Timestamp_current(), 
			filtered = True)

			new_temperatures_times = \ 
			GridstoreMethods.fetch_timestamps_betw(gridstore,serial_numbers[index], \
			last_timestamp,GridstoreMethods.Timestamp_current())

	for idx in range(len(new_rate_times) -1 , -1, -1):
	     		new_avg = \ 
				GridstoreMethods.get_instantaneous_rate(coffee_machine,new_rate_times[idx])
	     		….			
	     		line_sources[index].data["y"].append(new_avg)
   	
	for idx in range(len(new_temperatures_times)-1, -1, -1):
			new_temperature = 
			GridstoreMethods.get_recent_readings(gridstore,serial_numbers[index],
			int(new_temperatures_times[idx]))["temperature"]
			… 
   			temperature_sources[index].data["y"].append(new_temperature)

プログラムには、GridDBから挿入された新しいデータ行を使用してグラフを更新するのと同様のプロセスがあります。 このプログラムでは、更新コールバック関数が4秒ごとに実行されます。 コールバック機能では、コーヒーストア内のすべてのコーヒーマシンについて、機械の平均温度および現在の温度の読み取り値が得られます。 これは、過去のデータget_instantaneous_rateget_recent_readings、およびfetch_timestamps_betwを取得するための同様のメソッドとプロセスを使用します。

照会されたタイムスタンプ・レコードは、現在の時刻までで、timeseries行のデータ・セットにはない行に対するものです。 プログラムは、コーヒーマシンが表す行の最後の日付を取得します。 プログラムは、最後の日付以降の行のすべてのデータを収集し、グラフの各行を更新するのに必要な行フィールドを取得します。 更新はBokehtrigger機能を使用して視覚的に描画されます。

コーヒーストアの切り替え

データ視覚化コンポーネントがロードされると、一度に1つのコーヒーストアのデータのみが表示されます。 ユーザーは、一番上のドロップダウンオプションメニューでstore_idを選択することによって、コーヒーストアを切り替えることができます。 これが起こると、現在選択されている2つのプロットが消去され、新たに選択されたコーヒー・ストアからコーヒーマシンから引き出されたデータを表すために再描画されます。

if selectedVal != select.value:
….
	selectedVal = select.value
	subLayouts.remove(timeseries)
	subLayouts.remove(temperature_timeseries)

	serial_numbers = filter(lambda serial_num: len(serial_num) > 0, 
	GridstoreMethods.get_serial_nums(gridstore,str(selectedVal))) 
	
	timeseries_plots, line_sources = \
	create_timeseries(gridstore,str(selectedVal),serial_numbers,xrangeCallback) 
	temperature_plot, temperature_sources = 

	create_temperature_plot(gridstore,str(selectedVal), \
	serial_numbers, findPreviousTemperatures)
	
	subLayouts.insert(2,timeseries_plots)
	subLayouts.insert(3,temperature_plot)

プログラムは、オプションメニューの変更に応答して、ユーザーが新しいコーヒーストアに変更したことを検出します。 そこから、get_serial_nums()関数を使用して、そのコーヒーストア内のすべてのコーヒーマシンのシリアル番号を取得します。 今度は、時系列プロット用の行を作成するためのシリアル番号があるので、create_timeseries関数とcreate_temperature_plot関数でグラフを再描画し、Webページのlayoutに挿入(insert)することができます。

Source Code

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

Download: datavisualisation_application.tar.gz