# start bokeh-server before running this!

import time

import psutil
from bokeh.plotting import cursession, figure, output_notebook, output_server, show

# output_notebook()
output_server("line_server")

# prepare some data
x = [0]
y = [psutil.cpu_times_percent().user]

p = figure(title="Streaming data example", x_axis_label='Time (s)', y_axis_label='CPU load (%)')

p.line(x, y, legend="CPU user load", line_width=2, name="line")

show(p)

renderer = p.select(dict(name="line"))

ds = renderer[0].data_source

while True:
    ds.data["x"].append(ds.data["x"][-1] + 1)
    ds.data["y"].append(psutil.cpu_times_percent().user)
    if len(ds.data["x"]) > 30:
        ds.data["x"] = ds.data["x"][-30:]
        ds.data["y"] = ds.data["y"][-30:]
    cursession().store_objects(ds)
    time.sleep(1)
