I run a device monitoring script as a background process which is supposed to run forever. However the process got killed after 24+ hours with the error.
XIO: fatal IO error 25 (Inappropriate ioctl for device) on X server "localhost:10.0"^M
257706 after 507 requests (507 known processed) with 5 events remaining.^M
257707 0.4.38,23): recv 'x01159454 r28
I am using matplotlib to plot the graph and this is the first time I am using this lib. Since the error indicates X server issue I believe its related to matplot lib becuase other wise its pure telnet script and there is no role of X server anywhere in the script
Even with the matplot lib my goal is to save the graph as png image.
Below is my code for matplot lib, please see if anything obviously wrong with it.
15 plt.ioff()
16
17 def plot_cpu_utilization_graphs(df):
18 plt.clf()
19 column_name = 'CPU'
20 #df = df[[column_name, 'timestamp', 'ip']]
21 max_value = df[column_name].max()
22 if max_value < 100:
23 max_value = 100
24 min_value = df[column_name].min()
25 if min_value > 0:
26 min_value = 0
27 start_idx = df['timestamp'].iloc[0]
28 end_idx = df['timestamp'].iloc[-1]
29 time_series = pandas.DatetimeIndex(freq='20T', start=start_idx, end=end_idx)
30 y_axes_series = range(int(min_value), int(max_value), 10)
31 #ax = df.groupby('ip').plot(x='timestamp', y='CPU')
32 fig, ax = plt.subplots()
33 labels = []
34 for key, grp in df.groupby(['ip']):
35 ax = grp.plot(x='timestamp', y='CPU', ax=ax )
36 labels.append(key)
37 lines, _ = ax.get_legend_handles_labels()
38 lgd = ax.legend(lines, labels, loc='upper center', bbox_to_anchor=(-.25, 1))
39 ax.set_ylabel("CPU")
40 ax.set_xlabel("Time")
41 ax.set_ylim(min_value, max_value)
42 #ax.set_xlim(time_series[0], time_series[-1])
43 plt.title("CPU STATS")
44 fig.savefig('CPUStats', bbox_extra_artists=(lgd,), bbox_inches='tight')
74 def reboot_count(df):
75 plt.clf()
76 plt.cla()
77 sf = df[df.Rebooted][['ip', 'Rebooted']].groupby(['ip', 'Rebooted']).agg(len)
78 if not sf.empty:
79 new_df = pandas.DataFrame({"ip":sf.index.levels[0], "Reboot Count":sf.values})
80 p = new_df.plot(kind='bar', x='ip', y='Reboot Count', color='grey')
81
82 ax = p.axes
83 for tick in ax.get_xticklabels():
84 tick.set_rotation(15)
85 ax.set_ylabel("Reboot Count")
86 ax.set_xlabel("IP")
87 #ax.legend().remove()
88 plt.title(" REBOOT COUNTS")
89 plt.savefig('Reboot Counts')
90 else:
91 print "No Data Present for Graphs"
I had the same error. The error is due the backend that matplotlib
is using (you are running it in a non-interactive mode)
try
import matplotlib
matplotlib.use('Agg')
See https://matplotlib.org/faq/howto_faq.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With