|   | 92 |   | 
                  
                          |   | 93 | == Jupyter Notebook + HighCharts  | 
                  
                          |   | 94 |   | 
                  
                          |   | 95 | Jupyter Notebook + HighChartsでリッチなチャートを表示する例です。  | 
                  
                          |   | 96 |   | 
                  
                          |   | 97 | python-highchartsをpipでインストールしておく必要があります。  | 
                  
                          |   | 98 |   | 
                  
                          |   | 99 | {{{  | 
                  
                          |   | 100 | import subprocess  | 
                  
                          |   | 101 | from subprocess import Popen,PIPE  | 
                  
                          |   | 102 | from datetime import datetime  | 
                  
                          |   | 103 |   | 
                  
                          |   | 104 | from highcharts import Highchart  | 
                  
                          |   | 105 | H = Highchart(width=640, height=400)  | 
                  
                          |   | 106 |   | 
                  
                          |   | 107 | def readSarCPU(f):  | 
                  
                          |   | 108 |     args = ['/bin/bash','-c', "sadf -T --  -C " + f + " |awk '{print $3,$4,$6,$7}'"]  | 
                  
                          |   | 109 |     p = Popen(args,stdout=PIPE,stderr=PIPE)  | 
                  
                          |   | 110 |     out,err = p.communicate()  | 
                  
                          |   | 111 |     cpu = {'%user': [], '%nice': [], '%system': [], '%iowait': [], '%steal': [], '%idle': []}  | 
                  
                          |   | 112 |     timestamp = []  | 
                  
                          |   | 113 |     x = 0  | 
                  
                          |   | 114 |     prev = ""  | 
                  
                          |   | 115 |     for l in out.decode('utf8').split('\n'):  | 
                  
                          |   | 116 |         if l == "":  | 
                  
                          |   | 117 |             break;  | 
                  
                          |   | 118 |         r = l.split(" ")  | 
                  
                          |   | 119 |   | 
                  
                          |   | 120 |         if prev != r[1]:  | 
                  
                          |   | 121 |             timestamp.append(datetime.strptime(r[0]+" "+r[1], '%Y-%m-%d %H:%M:%S'))  | 
                  
                          |   | 122 |             prev = r[1]  | 
                  
                          |   | 123 |             x = x+1  | 
                  
                          |   | 124 |         cpu[r[2]].append(float(r[3]))  | 
                  
                          |   | 125 |     return (timestamp, cpu)  | 
                  
                          |   | 126 |   | 
                  
                          |   | 127 |   | 
                  
                          |   | 128 | def plot(x, data, highchart, title="",xlabel="",ylabel=""):   | 
                  
                          |   | 129 |   | 
                  
                          |   | 130 |     options = {  | 
                  
                          |   | 131 |         'title': {  | 
                  
                          |   | 132 |             'text': 'CPU Usage'  | 
                  
                          |   | 133 |         },  | 
                  
                          |   | 134 |         'subtitle': {  | 
                  
                          |   | 135 |             'text': 'Source: test.sar'  | 
                  
                          |   | 136 |         },  | 
                  
                          |   | 137 |         'xAxis': {  | 
                  
                          |   | 138 |             'type': 'datetime',  | 
                  
                          |   | 139 |             'minRange': 1000*len(x)  | 
                  
                          |   | 140 |         },  | 
                  
                          |   | 141 |         'yAxis': {  | 
                  
                          |   | 142 |             'title': {  | 
                  
                          |   | 143 |                 'text': ylabel  | 
                  
                          |   | 144 |             },  | 
                  
                          |   | 145 |             'labels': {  | 
                  
                          |   | 146 |                 'formatter': 'function () {\  | 
                  
                          |   | 147 |                                     return this.value ;\  | 
                  
                          |   | 148 |                                 }'  | 
                  
                          |   | 149 |             },  | 
                  
                          |   | 150 |             'max': 100  | 
                  
                          |   | 151 |         },  | 
                  
                          |   | 152 |         'tooltip': {  | 
                  
                          |   | 153 |             'shared': True,  | 
                  
                          |   | 154 |             'valueSuffix': ylabel  | 
                  
                          |   | 155 |         },  | 
                  
                          |   | 156 |         'plotOptions': {  | 
                  
                          |   | 157 |             'area': {  | 
                  
                          |   | 158 |                 'stacking': 'normal',  | 
                  
                          |   | 159 |                 'lineColor': '#666666',  | 
                  
                          |   | 160 |                 'lineWidth': 1,  | 
                  
                          |   | 161 |                 'marker': {  | 
                  
                          |   | 162 |                     'lineWidth': 1,  | 
                  
                          |   | 163 |                     'lineColor': '#666666'  | 
                  
                          |   | 164 |                 }  | 
                  
                          |   | 165 |             }  | 
                  
                          |   | 166 |         }  | 
                  
                          |   | 167 |     }  | 
                  
                          |   | 168 |     highchart.set_dict_options(options)  | 
                  
                          |   | 169 |     for k in data.keys():  | 
                  
                          |   | 170 |         highchart.add_data_set(data[k],'area',k,pointInterval=1000, pointStart=x[0])  | 
                  
                          |   | 171 |           | 
                  
                          |   | 172 | timestamp, cpu = readSarCPU("test.sar")  | 
                  
                          |   | 173 | plot(x=timestamp, data=cpu,ylabel=u"%",xlabel=u"time",highchart=H)  | 
                  
                          |   | 174 | H  | 
                  
                          |   | 175 | }}}  |