Hi,

I am trying to plot netstat (network stats taken from
/proc/net/netstat on linux), the parsed file looks like this:

Tue Jul 28 17:11:39 2009
TcpExt:       TcpExt:
SyncookiesSent       35367
SyncookiesRecv       83175
SyncookiesFailed       626981
EmbryonicRsts       2683828
PruneCalled       0
RcvPruned       0
OfoPruned       0
OutOfWindowIcmps       0
LockDroppedIcmps       0
ArpFilter       0
TW       731933844
TWRecycled       2519
TWKilled       0
PAWSPassive       0
PAWSActive       0
PAWSEstab       0
DelayedACKs       260793151
DelayedACKLocked       39078
DelayedACKLost       8463534
ListenOverflows       5702696
ListenDrops       5702696
TCPPrequeued       757095
TCPDirectCopyFromBacklog       20396543
TCPDirectCopyFromPrequeue       41213784
TCPPrequeueDropped       0
TCPHPHits       1980793902
TCPHPHitsToUser       969080
TCPPureAcks       1329017292
TCPHPAcks       1527716572
TCPRenoRecovery       441952
TCPSackRecovery       158939
TCPSACKReneging       590
TCPFACKReorder       2354
TCPSACKReorder       12
TCPRenoReorder       77537
TCPTSReorder       3
TCPFullUndo       364
TCPPartialUndo       2267
TCPDSACKUndo       57659
TCPLossUndo       1377902
TCPLoss       83058
TCPLostRetransmit       65
TCPRenoFailures       597875

I am collecting this information every 3 minutes and want to plot
every indivudal value (like for example TCPLoss) in separate date
graph. Anyhow I have problems setting the date value

This is the exception I get:
Traceback (most recent call last):
  File "./graph_last.py", line 86, in <module>
    main()
  File "./graph_last.py", line 75, in main
    ax.plot(counter['date'],counter.__dict__[count])
  File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 2654, in plot
    for line in self._get_lines(*args, **kwargs):
  File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line
397, in _grab_next_args
    for seg in self._plot_2_args(remaining, **kwargs):
  File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line
339, in _plot_2_args
    func(x[:,j], y[:,j])
  File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line
320, in makeline
    axes=self.axes,
  File "/usr/lib/python2.5/site-packages/matplotlib/lines.py", line
284, in __init__
    self.set_data(xdata, ydata)
  File "/usr/lib/python2.5/site-packages/matplotlib/lines.py", line
405, in set_data
    self.recache()
  File "/usr/lib/python2.5/site-packages/matplotlib/lines.py", line
410, in recache
    x = ma.asarray(self.convert_xunits(self._xorig), float)
  File "/usr/lib/python2.5/site-packages/numpy/core/ma.py", line 2123,
in asarray
    return array(data, dtype=dtype, copy=0)
  File "/usr/lib/python2.5/site-packages/numpy/core/ma.py", line 574,
in __init__
    self._data = c.astype(tc)
ValueError: invalid literal for float(): Tue Jul 28 17:15:01 2009



This is the script based on the date example:
#!/usr/bin/python
import re
import datetime
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.mlab as mlab

days = mdates.DayLocator()
hours = mdates.HourLocator()
daysFmt = mdates.DateFormatter('%c')
class Mylist(list):
        def append(self,x):
                if not self.__contains__(x):
                        return super(Mylist, self).append(x)
                else:
                        raise AttributeError

        
class Counter():
        def __init__(self):
                self.names = Mylist()
        def __setitem__(self,key,value):
                '''
                Now try to append the name to the list
                '''
                try:
                        self.names.append(key)
                except AttributeError:
                        pass
                
                try:
                        self.__dict__[key].append(value)
                except KeyError:
                        self.__dict__[key] = list()
                
        def __getitem__(self,key):
                '''
                Return the list
                '''
                return list(self.__dict__[key])
def main():
        try:
                file = open("netstat_output",)
        except IOError:
                print "There was a problem with the file\n"

        counter = Counter()
        lastline = re.compile('====================================')
        date = re.compile(r"\b\w{3} \w{3} \d{2} \d\d:\d\d:\d\d \d{4}\b")
        tcpext = re.compile('Tcpext:',re.IGNORECASE)
        lines = file.readlines()


        for line in lines:
                if (date.search(line)):
                        counter['date'] = line
                elif (lastline.search(line)):
                        pass
                elif (tcpext.search(line)):
                        pass
                else:
                        currlist = line.split()
                        counter[currlist[0]] = currlist[1]


        for count in counter.names:
                 fig = plt.figure()
                 ax = fig.add_subplot(111)
                 ax.plot(counter['date'],counter.__dict__[count])

                 ax.xaxis.set_major_locator(days)
                 ax.xaxis.set_major_formatter(daysFmt)
                 ax.xaxis.set_minor_locator(hours)

                 ax.format_xdata = mdates.DateFormatter('%d-%H')
                 ax.grid(True)
                 fig.autofmt_xdate()
                 plt.show()
if __name__ == "__main__":
        main()

Could someone please help me how to pass dates to plot() ?


Thanks,

Jorge

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to