|
35 | 35 | "outputs": [],
|
36 | 36 | "source": [
|
37 | 37 | "from datetime import timedelta\n",
|
| 38 | + "from typing import List\n", |
38 | 39 | "\n",
|
39 | 40 | "import hvplot.streamz\n",
|
40 | 41 | "import pandas as pd\n",
|
|
52 | 53 | "metadata": {},
|
53 | 54 | "outputs": [],
|
54 | 55 | "source": [
|
55 |
| - "def source_data(auto_refresh: int, sink: Stream):\n", |
| 56 | + "def source_data(auto_refresh: int, query: str, sink: Stream):\n", |
56 | 57 | " rx \\\n",
|
57 | 58 | " .interval(period=timedelta(seconds=auto_refresh)) \\\n",
|
58 | 59 | " .pipe(ops.map(lambda start: f'from(bucket: \"my-bucket\") '\n",
|
59 | 60 | " f'|> range(start: -{auto_refresh}s, stop: now()) '\n",
|
60 |
| - " f'|> filter(fn: (r) => (r._measurement == \"cpu\") or (r._measurement == \"mem\")) ')) \\\n", |
61 |
| - " .pipe(ops.map(lambda query: client.query_api().query_stream(query))) \\\n", |
62 |
| - " .pipe(ops.flat_map(lambda records: rx.from_iterable(records))) \\\n", |
63 |
| - " .subscribe(observer=lambda record: sink.emit(record), on_error=lambda error: print(error))\n", |
| 61 | + " f'{query}')) \\\n", |
| 62 | + " .pipe(ops.map(lambda query: client.query_api().query_data_frame(query, data_frame_index=['_time']))) \\\n", |
| 63 | + " .pipe(ops.map(lambda data_frame: data_frame.drop(columns=['result', 'table']))) \\\n", |
| 64 | + " .subscribe(observer=lambda data_frame: sink.emit(data_frame), on_error=lambda error: print(error))\n", |
64 | 65 | " pass"
|
65 | 66 | ]
|
66 | 67 | },
|
|
70 | 71 | "metadata": {},
|
71 | 72 | "outputs": [],
|
72 | 73 | "source": [
|
73 |
| - "client = InfluxDBClient(url=\"http://localhost:9999\", token=\"my-token\", org=\"my-org\", debug=False)\n", |
74 |
| - "\n", |
75 |
| - "sink = Stream()\n", |
76 |
| - "source_data(auto_refresh=5, sink=sink)" |
| 74 | + "client = InfluxDBClient(url='http://localhost:9999', token='my-token', org='my-org')" |
77 | 75 | ]
|
78 | 76 | },
|
79 | 77 | {
|
|
82 | 80 | "metadata": {},
|
83 | 81 | "outputs": [],
|
84 | 82 | "source": [
|
85 |
| - "cpu_example = pd.DataFrame({'value': []}, columns=['value'])\n", |
| 83 | + "cpu_query = '|> filter(fn: (r) => r._measurement == \"cpu\") ' \\\n", |
| 84 | + " '|> filter(fn: (r) => r._field == \"usage_user\") ' \\\n", |
| 85 | + " '|> filter(fn: (r) => r.cpu == \"cpu-total\") ' \\\n", |
| 86 | + " '|> keep(columns: [\"_time\", \"_value\"])'\n", |
| 87 | + "\n", |
| 88 | + "\n", |
| 89 | + "cpu_sink = Stream()\n", |
| 90 | + "cpu_example = pd.DataFrame({'_value': []}, columns=['_value'])\n", |
| 91 | + "cpu_df = DataFrame(cpu_sink, example=cpu_example)\n", |
86 | 92 | "\n",
|
87 |
| - "cpu_sink = sink\\\n", |
88 |
| - " .filter(lambda record: (record[\"_measurement\"] == \"cpu\") & (record[\"_field\"] == \"usage_user\"))\\\n", |
89 |
| - " .map(lambda record: pd.DataFrame({'value': [record[\"_value\"]]}, columns=['value'], index=[record[\"_time\"]]))\n", |
90 |
| - "cpu = DataFrame(cpu_sink, example=cpu_example)" |
| 93 | + "source_data(auto_refresh=5, sink=cpu_sink, query=cpu_query)" |
91 | 94 | ]
|
92 | 95 | },
|
93 | 96 | {
|
|
96 | 99 | "metadata": {},
|
97 | 100 | "outputs": [],
|
98 | 101 | "source": [
|
99 |
| - "mem_example = pd.DataFrame({'field': [], 'value': []}, columns=['field', 'value'])\n", |
| 102 | + "mem_query = '|> filter(fn: (r) => r._measurement == \"mem\") ' \\\n", |
| 103 | + " '|> filter(fn: (r) => r._field == \"available\" or r._field == \"free\" or r._field == \"total\" or r._field == \"used\") ' \\\n", |
| 104 | + " '|> map(fn: (r) => ({ r with _value: r._value / 1024 / 1024 }))' \\\n", |
| 105 | + " '|> pivot(rowKey:[\"_time\"], columnKey: [\"_field\"], valueColumn: \"_value\")' \\\n", |
| 106 | + " '|> keep(columns: [\"_time\", \"used\", \"total\", \"free\", \"available\"])'\n", |
100 | 107 | "\n",
|
101 |
| - "mem_sink = sink \\\n", |
102 |
| - " .filter(lambda record: record[\"_measurement\"] == \"mem\") \\\n", |
103 |
| - " .filter(lambda record: record[\"_field\"] in [\"total\", \"used\", \"free\", \"available\"]) \\\n", |
104 |
| - " .map(lambda record: pd.DataFrame({'field': record[\"_field\"], 'value': record[\"_value\"]},\n", |
105 |
| - " columns=['field', 'value'], index=[record[\"_time\"], record[\"_field\"]]))\n", |
106 |
| - "mem = DataFrame(mem_sink, example=mem_example)" |
| 108 | + "mem_sink = Stream()\n", |
| 109 | + "mem_example = pd.DataFrame({'used': [], 'total': [], 'free': [], 'available': []}, columns=['available', 'free', 'total', 'used'])\n", |
| 110 | + "mem_df = DataFrame(mem_sink, example=mem_example)\n", |
| 111 | + "\n", |
| 112 | + "source_data(auto_refresh=5, sink=mem_sink, query=mem_query)" |
107 | 113 | ]
|
108 | 114 | },
|
109 | 115 | {
|
|
130 | 136 | " years=[\"%H:%M:%S\"],\n",
|
131 | 137 | ")\n",
|
132 | 138 | "\n",
|
133 |
| - "cpu.hvplot(width=700, backlog=50, title='CPU % usage', xlabel='Time', ylabel='%', xformatter=formatter)" |
134 |
| - ] |
135 |
| - }, |
136 |
| - { |
137 |
| - "cell_type": "code", |
138 |
| - "execution_count": null, |
139 |
| - "metadata": {}, |
140 |
| - "outputs": [], |
141 |
| - "source": [ |
142 |
| - " mem.groupby('field').sum().hvplot.bar()" |
| 139 | + "cpu_df.hvplot(width=450, backlog=50, title='CPU % usage', xlabel='Time', ylabel='%', xformatter=formatter) +\\\n", |
| 140 | + "mem_df.hvplot.line(width=450, backlog=50, title='Memory', xlabel='Time', ylabel='MiB', xformatter=formatter, legend='top_left')" |
143 | 141 | ]
|
144 | 142 | },
|
145 | 143 | {
|
|
0 commit comments