本人在作工做中,要對某一個接口的響應耗時進行一個長期的統計,因爲以前的數據全都寫在了數據庫中,統計了半年多的數據。在學習了plotly的Time Series 時間序列圖標以後,繪製了一張接口響應耗時的圖標,分享代碼,供你們參考。html
下面是從數據庫讀取數據的java代碼:java
JSONObject data = new JSONObject(); ResultSet resultSet = MySqlTest.excuteQuerySql("SELECT DATE(create_time),AVG(elapsed_time) *1000 FROM request_record WHERE api_name in(\"/service/user/v3/login/mobile/v5\",\"/service/user/v3/login/mobile/v4\") GROUP BY DATE(create_time) ORDER BY DATE(create_time);"); while (resultSet.next()) { String name = resultSet.getString(1); double time = resultSet.getDouble(2); data.put(name, time); } resultSet.close(); Save.saveJsonList(data, "apitime");
下面是讀取文件的方法和生成表格的調用類的代碼:python
#!/usr/bin/python # coding=utf-8 from first.date import DatePlot class Fission: x = [] y = [] z = [] def __init__(self): print "歡迎使用fission類!" def getData(self, name): size = 0; with open("/Users/Vicky/Documents/workspace/api_test/long/" + name + ".log") as apidata: for i in apidata: data = i.split("\r\n")[0] time = float(data) if time > 2: continue self.z.append(data) size += 1; length = size; for i in range(length): self.x.append(name + "線程") def getDataMarkLine(self, name): with open("/Users/Vicky/Documents/workspace/api_test_najm/long/" + name + ".log") as apidata: for i in apidata: data = i.split("\r\n")[0].split("|") day = data[0] time = float(data[1]) self.x.append(day) self.y.append(time) return [self.x, self.y] if __name__ == "__main__": fission = Fission() a = fission.getDataMarkLine("apitime") DatePlot.MakePlot(a[0], a[1], "time")
下面是生成時間序列表的封裝類(我保留了多條折現的方法以及註釋了顯示規定日期間隔數據的方法):數據庫
#!/usr/bin/python # coding=utf-8 import plotly.graph_objs as drive import plotly.plotly class DatePlot: def __init__(self): print "時間表格!" @staticmethod def MakePlot(x, y, titile): a = drive.Scatter( x=x, y=y, name="SSSSS", line=dict(color='#17BECF'), opacity=1 ) b = drive.Scatter( x=["2016-02-20", "2016-02-21", "2016-02-23"], y=[28.04, 20, 33], name="AAAAA", line=dict(color='#7F7F7F'), opacity=0.8 ) data = [a] layout = dict( title=titile, # xaxis=dict( # range=['2018-07-01', '2018-07-20']) ) fig = dict(data=data, layout=layout) plotly.offline.plot(fig, filename=titile + ".html")
下面是效果圖:編程