本人在做工作中,要对某一个接口的响应耗时进行一个长期的统计,由于之前的数据全都写在了数据库中,统计了半年多的数据。在学习了plotly的Time Series 时间序列图标之后,绘制了一张接口响应耗时的图标,分享代码,供大家参考。
下面是从数据库读取数据的java代码:
1 JSONObject data = new JSONObject();
2 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);");
3 while (resultSet.next()) {
4 String name = resultSet.getString(1);
5 double time = resultSet.getDouble(2);
6 data.put(name, time);
7 }
8 resultSet.close();
9 Save.saveJsonList(data, "apitime");
下面是读取文件的方法和生成表格的调用类的代码:
1#!/usr/bin/python
2# coding=utf-8
3
4from first.date import DatePlot
5
6
7class Fission:
8 x = []
9 y = []
10 z = []
11
12 def __init__(self):
13 print "欢迎使用fission类!"
14
15 def getData(self, name):
16 size = 0;
17 with open("/Users/Vicky/Documents/workspace/api_test/long/" + name + ".log") as apidata:
18 for i in apidata:
19 data = i.split("\r\n")[0]
20 time = float(data)
21 if time > 2: continue
22 self.z.append(data)
23 size += 1;
24 length = size;
25 for i in range(length):
26 self.x.append(name + "线程")
27
28 def getDataMarkLine(self, name):
29 with open("/Users/Vicky/Documents/workspace/api_test_najm/long/" + name + ".log") as apidata:
30 for i in apidata:
31 data = i.split("\r\n")[0].split("|")
32 day = data[0]
33 time = float(data[1])
34 self.x.append(day)
35 self.y.append(time)
36 return [self.x, self.y]
37
38
39if __name__ == "__main__":
40 fission = Fission()
41 a = fission.getDataMarkLine("apitime")
42 DatePlot.MakePlot(a[0], a[1], "time")
下面是生成时间序列表的封装类(我保留了多条折现的方法以及注释了显示规定日期间隔数据的方法):
1#!/usr/bin/python
2# coding=utf-8
3
4import plotly.graph_objs as drive
5import plotly.plotly
6
7
8class DatePlot:
9 def __init__(self):
10 print "时间表格!"
11
12 @staticmethod
13 def MakePlot(x, y, titile):
14 a = drive.Scatter(
15 x=x,
16 y=y,
17 name="SSSSS",
18 line=dict(color='#17BECF'),
19 opacity=1
20 )
21
22 b = drive.Scatter(
23 x=["2016-02-20", "2016-02-21", "2016-02-23"],
24 y=[28.04, 20, 33],
25 name="AAAAA",
26 line=dict(color='#7F7F7F'),
27 opacity=0.8
28 )
29
30 data = [a]
31
32 layout = dict(
33 title=titile,
34 # xaxis=dict(
35 # range=['2018-07-01', '2018-07-20'])
36 )
37 fig = dict(data=data, layout=layout)
38 plotly.offline.plot(fig, filename=titile + ".html")
下面是效果图:

原文作者:FunTester;如有侵权,请联系管理员删除。