;ò
­ÆÑBc           @   s  d  k  Td  k Td k Z d k l Z d k Z d k Z d  k Td k Z d k Z d k	 Z	 d k
 Z
 d k Z d k Z d k Z d k Z d k Z d k l Z d k Z d k Z d  k Td k Z d k Z d a d a e a e i a d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z  d „  Z! d d „ Z" d „  Z# d „  Z$ d „  Z% d „  Z& d „  Z' d „  Z( d „  Z) d „  Z* d „  Z+ d S(   (   s   *N(   s   Sorter(   s   strptimei    s    c         C   sÖ  |  i d j o |  i a n t i ƒ  } t d |  i d |  i d |  i d t |  i	 ƒ d t |  i
 ƒ d |  i d |  i d |  i d	 |  i d
 t |  i ƒ d t |  i ƒ d t |  i ƒ d t ƒ |  i	 t j oéd |  _ d |  _ |  i d j o t i |  d ƒ Sn |  i d j o t i |  d ƒ Sn |  i d j o t i |  d ƒ Sn |  i d j o t i |  d ƒ Sn |  i d j o t i |  d ƒ Sn |  i d j o t i |  d ƒ Sn |  i d j o t i |  d ƒ Sn |  i d j o t i |  d ƒ Sn |  i d j o t i |  d ƒ Sn |  i d j o t i |  d ƒ Sn |  i d j o t i |  ƒ Sn |  i d j o t i |  ƒ Sn |  i d j o t i |  ƒ Sn |  i d j o t i |  ƒ Sn |  i d j o t i |  ƒ Sn |  i d j o t i |  ƒ Sn |  i d  j o t i  |  ƒ Sn |  i d! j o t i! |  ƒ Sn |  i d" j o t i" |  ƒ Sn |  i d# j o t i# |  ƒ Sn |  i d$ j o t i$ |  ƒ SqÒn |  i	 t% j o t i |  ƒ Sn |  i	 t& j o) t' |  _
 t( |  ƒ } t* i+ | |  ƒ Sn |  i d j o t, i- o% t. |  ƒ } |  i |  _ d |  _ n t/ |  ƒ } t0 t1 ƒ |  i	 t2 j o t3 |  | ƒ n |  i	 t4 j o t3 |  | ƒ n |  i	 t5 j o t3 |  | ƒ n |  i	 t6 j o t3 |  | ƒ n |  i	 t7 j o t3 |  | ƒ n |  i8 t9 j oš t, i: d% t; i< d& } d% t; i< d& } t, i: t; i< d% t; i< d' |  i> d( |  i? i@ tA iB d d ƒ d) ƒ d* } tC iD | | |  ƒ | d | f Sn |  i8 tE j oš t, i: d% t; i< d+ } d% t; i< d+ } t, i: t; i< d% t; i< d' |  i> d( |  i? i@ tA iB d d ƒ d) ƒ d, } tC iF | | |  ƒ | d | f Sn t d- t t i ƒ  | ƒ d. d/ |  i ƒt d0 |  i d1 |  i? ƒ t* i+ | |  ƒ Sd  S(2   Ns    s   SpeedGraphImage: NetObject=s    IP=s
    hostname=s    Chart=s    Chart_Type=s    s    chartName=s	    groupId=s    force=s    stop=s    5min=s    debugHost=s   Channel-1 RX-speedi   s   Channel-1 RX-packetss   Channel-1 TX-speeds   Channel-1 TX-packetss   Channel-1 Multicast-packetss   Channel-2 RX-speedi   s   Channel-2 RX-packetss   Channel-2 TX-speeds   Channel-2 TX-packetss   Channel-2 Multicast-packetss   CPU-load Usages   CPU-load Systems   CPU-load Users   CPU-load Soft IRQs   CPU-load IRQs   CPU-load Nices   CPU-load IO Waits   Connectionss   Connections Create Attemptss   Connections Createds   Hostss   exports   speedexport.csvs   speed_s   _s   :- s   .csvs   dataexport.xmls   .xmls   Total time = s    sec.s   hosts   speedGraph.stat_end_time=s    speedGraph.graph_end_time=(G   s
   speedGraphs	   debugHosts   times
   timerstarts   debugMsgs	   netObjects
   IP_addresss   hostnames   strs   charts
   chart_types   stat_start_times   stat_end_times	   chartNames   groupIds   forces   stops	   flag_5mins   LiveLine_charts	   groupNames   PL2_Packetlogics   getChannelStatRXSpeedGraphs   getChannelStatRXpacketsGraphs   getChannelStatTXSpeedGraphs   getChannelStatTXpacketsGraphs#   getChannelStatMulticastpacketsGraphs   getSystemGeneralCPUloadUsages   getSystemGeneralCPUloadSystems   getSystemGeneralCPUloadUsers   getSystemGeneralCPUloadSoftIRQs   getSystemGeneralCPUloadIRQs   getSystemGeneralCPUloadNices   getSystemGeneralCPUIOWaits   getSystemConnectionStatGraphs*   getSystemConnectionCreateAttemptsStatGraphs#   getSystemConnectionCreatedStatGraphs   getSystemHostStatGraphs   ChannelRXpacketss   Host_cou_charts
   Year_charts   getHostCouDatas	   graphDatas	   drawgraphs   drawSpeedGraphs   PL2_inis   PL2s   speedGraphGroupDatas   speedGraphDatas   disconnectFromPLservers   stats	   Pie_charts   getSpecGraphDatas	   BGP_charts   BGP_barcharts   Tankmater_charts	   TCP_charts   outputs	   exportCSVs   PL_paths   oss   seps   filenames   graph_start_times   graph_end_times	   translates   strings	   maketranss
   PL2_exports   exportGraphDataToCSVs	   exportXMLs   exportGraphDataToXML(   s
   speedGraphs	   graphDatas   filenames
   timerstart(    (    s   C:\Python\PL\PL_Speed.pys   SpeedGraphImage?   s®     °			
MM+c         C   sÁ  t  i  ƒ  } t | d ƒ d } | d } d |  i d d !t i |  _ |  i |  _	 |  i
 |  _ t d |  i d |  i
 d t |  i ƒ d	 t |  i ƒ d
 t  i d t  i | ƒ ƒ d |  i ƒt  i d t  i | ƒ ƒ |  i
 j o |  i o«d |  i d d !t i d t i |  _ |  i d j on|  i d d f j o" t  i d t  i | ƒ ƒ |  _ n |  i d d f j o" t  i d t  i | ƒ ƒ |  _ n |  i d j o" t  i d t  i | ƒ ƒ |  _ n |  i d j o@ t  i d t  i | ƒ ƒ |  _ t  i d t  i | ƒ ƒ |  _
 n |  i d j oH t  i t |  i
 d ƒ ƒ t  i } t  i d t  i | d ƒ ƒ |  _
 n |  i d j o |  i |  _
 qšqžn |  i o± t t  i d t  i | ƒ ƒ d |  i d |  i ƒt  i d t  i | ƒ ƒ |  i j  oU t  i d t  i | ƒ ƒ |  _ t t  i d t  i | ƒ ƒ d |  i d |  i ƒqYn t d |  i d |  i
 d t |  i ƒ d	 t |  i ƒ d
 t  i d t  i | ƒ ƒ d |  i ƒd  S(   Ni,  i€Q s   dati    i   s   Before s    - s    stop=s    randomread=s	    curtime=s   %Y-%m-%d %H:%Ms   hosts   tmpi   ie   i   if   s   %Y-%m-%d 00:00i   ig   s   %Y<-%m-%d 00:00ih   ic   s   %Y-%m-%d %H:00s    s   After (   s   times   todays   longs   tomorrows
   speedGraphs   stat_start_times   oss   seps
   filePrefixs   graph_start_times   stat_end_times   graph_end_times   debugMsgs   strs   stops
   randomReads   strftimes	   localtimes	   debugHosts   mktimes   strptimes   timezones   time_tmp(   s
   speedGraphs   time_tmps   tomorrows   today(    (    s   C:\Python\PL\PL_Speed.pys   prepGraphTimeÑ   s@    
W/)"""""&
3%;Wc         C   sA  d |  _ t d t |  i ƒ d t |  i ƒ d t |  i ƒ d |  i ƒt i ƒ  } t	 |  ƒ t
 i |  i |  i d t |  i ƒ d |  i d |  i i t i d d ƒ d ƒ d	 |  _ t i |  i ƒ } t i |  i ƒ } |  i o£ t d
 |  i d |  i d |  i ƒt |  ƒ } t d ƒ t i ƒ  } t d |  i ƒ d |  _  t
 i! o
 d } n t d t t i ƒ  | ƒ d d |  i ƒns t" i# i$ |  i ƒ o |  i% o, t d |  i ƒ d |  _  t& |  i ƒ } n& t d |  i ƒ d |  _  t |  ƒ } t i' | |  ƒ t d t t i ƒ  | ƒ d d t ƒ| Sd  S(   Ni   s!   Start SpeedGraphData: randomRead=s    stop=s    5min=s   hosts   _s    s   :- s   .dats   randomRead s   -s   LoggPLgraphUses   RNDs   #s   ¤s   LoggPLgraphUse took s   sec.s   looks   creates   *s   SpeedGraphData took ((   s
   speedGraphs
   randomReads   debugMsgs   strs   stops	   flag_5mins	   debugHosts   times   timer10s   prepGraphTimes   PL2_inis   PL_paths
   filePrefixs
   IP_addresss
   chart_types   graph_start_times   graph_end_times	   translates   strings	   maketranss   filenames	   drawgraphs   sizeBarGraphDatas   sizeBarDatas   sizeLineGraphDatas   sizeLineDatas   stat_start_times   stat_end_times   getSpeedGraphDatas	   graphDatas   timers   loggPLgraphUses   createdFlags   PL2s   oss   paths   existss   forces   loadGraphDatas   calcAvgSpeed(   s
   speedGraphs   timer10s   createdFlags   timers	   graphDatas   sizeBarDatas   sizeLineData(    (    s   C:\Python\PL\PL_Speed.pys   speedGraphData  s8    	5
]
%
	

/!		(c         C   sœ  d  k  } d |  _ t |  ƒ t t i t |  i d ƒ ƒ t i t |  i	 d ƒ ƒ d ƒ } t d |  i d t | ƒ d |  i ƒd |  _ g  }	 d } y t |  i ƒ } Wn d } n X| t i j o |  i o d  k } d t d | ƒ |  _ | i ƒ  } | i | |  i ƒ \ |  _ } } t |  ƒ } t d	 t | ƒ d
 |  i  d |  i! d |  i ƒn'| i" |  d ƒ } | i# | | ƒ \ } |  _ t% i& t% i' |  i( ƒ t% i) |  i( ƒ ƒ } t* | i+ ƒ } x¥ t, | ƒ D]— } yk | i. | }
 |
 i0 t1 d ƒ } t* | ƒ d j  o | d } d } n | d } | d } |	 i4 | ƒ WqØt d d | d d t ƒqØXqØWt5 | |  |	 | | ƒ } | | _ | Sd  S(   Ni    s   %Y-%m-%d %H:%Mi€Q s   SpeedGraph for groupId s    daysInChart=s   hosts
   totalstat-s   %.4ds   Groupread: groupId=s    s   -i   s    i   s   Error in toplistLabels s   "(6   s
   PL_Toplists
   speedCharts
   randomReads   prepGraphTimes   ints   times   mktimes   strptimes   stat_end_times   stat_start_times   daysInCharts   debugMsgs   groupIds   strs	   debugHosts   hostsInGraphs   IP_addressess   hostss
   numGroupIds   PL1_inis   total_stat_ids   forces   PL_Netobjects
   IP_addresss	   netobjects   netss   IsHostInNetObjects	   groupNames   addressLookupFlags   itemIds   speedGraphDatas	   graphDatas   graph_start_times   graph_end_times   toplistDatas   selectToplistByGroupIds   groupGraphDatas	   drawgraphs	   GraphDatas   sizeBarGraphDatas
   chart_types   sizeLineGraphDatas   lens   toplistData0s   ranges   xs   toplistLabelss   hosts   splits   Nones	   host_infos   hostnames   appends   getDataFromRDB(   s
   speedCharts   daysInCharts   PL_Netobjects   netss	   host_infos
   IP_addresss   hostnames	   graphDatas
   numGroupIds   IP_addressess   hosts   groupGraphDatas   xs   itemIds
   PL_Toplists   hostss   addressLookupFlag(    (    s   C:\Python\PL\PL_Speed.pys   speedGraphGroupData9  sN    		
>(	
	!7* 



$	c         C   s|  d } d } |  i o
 d } n t t i t |  i d ƒ ƒ t i t |  i	 d ƒ ƒ d ƒ |  _
 t d t t i |  i ƒ ƒ d t t i |  i ƒ ƒ d t |  i ƒ d t |  i ƒ d	 t |  i ƒ d
 |  i ƒt i t i |  i ƒ t i |  i ƒ ƒ } |  i d |  _ |  i t j o | o d |  _ t | |  ƒ Sn |  i t j o | o d |  _ t | |  ƒ Sn |  i t j o | o d |  _ t | |  ƒ Sn t d t t i ƒ d t |  i ƒ d t |  i ƒ ƒ t i o; t d t |  i ƒ d t |  i  ƒ ƒ t! | |  ƒ } nS |  i o/ t d ƒ t" | |  |  i g |  i
 | ƒ } n t d ƒ t# | |  ƒ } | Sd  S(   Ni   i    s   %Y-%m-%d %H:%Mi€Q s   SizeBarGraphData=s    SizeLineGraphData=s    randomRead=s    Chart_Type=s    5min=s   hosts   .i0   i   s   PL2=s	    groupId=s    IP_address=s   getDataFromPL2 groupId=s    netObject=s   getDataFromRDBs   getDataFromPL1($   s	   splitReads
   numGroupIds
   speedCharts
   randomReads   ints   times   mktimes   strptimes   stat_end_times   stat_start_times   daysInCharts   debugMsgs   strs	   drawgraphs   sizeBarGraphDatas
   chart_types   sizeLineGraphDatas	   flag_5mins	   debugHosts	   GraphDatas	   graphDatas   hostnames
   Week_charts   valuesPerDays   SplitReadDays   Month_charts
   Year_charts   SplitReadMonths   PL2_inis   PL2s   groupIds
   IP_addresss	   netObjects   getDataFromPL2s   getDataFromRDBs   getDataFromPL(   s
   speedCharts
   numGroupIds	   graphDatas	   splitRead(    (    s   C:\Python\PL\PL_Speed.pys   getSpeedGraphData„  s:    

Ai*			9
 (

%
c         C   s7  d  k  }	 |	 i  | ƒ } d | _ t | _ t i t | i	 d ƒ ƒ } | | i d } d } xÀt | | d ƒ D]¬}
 t i d t i |
 ƒ ƒ | _	 t i d t i |
 d ƒ ƒ | _ t d t i d t i |
 ƒ ƒ d t i d t i |
 d ƒ ƒ d t | ƒ d	 t ƒt | ƒ } | | i } d
 | i d } xn t d t | i ƒ ƒ D]T } |  i | c | i | 7<|  i | c | i | 7<|  i  | c | i  | 7<qPWx0t d t | i! ƒ ƒ D]} | | | } |  i! | | i! | j  o | i! | |  i! | <n |  i# | | i# | j  o | i# | |  i# | <n |  i$ | | i$ | j  o | i$ | |  i$ | <n |  i% | i% j  o | i% |  _% n |  i& | i& j  o | i& |  _& n |  i' | i' j  o | i' |  _' qÁqÁW|  i( | i( 7_( |  i) | i) 7_) |  i* | i* 7_* | d 7} qo Wt+ | i, |  ƒ |  Sd  S(   Nih   s   %Y-%m-%d %H:%Mi€Q i    s   %Y-%m-%d 00:00s	   Get data s    - s    Day =s   hosti   i   i   (-   s   copys
   speedCharts   daySpeedCharts   stops	   Day_charts
   chart_types   times   mktimes   strptimes   stat_start_times	   day_starts   daysInCharts   day_stops   dayNos   ranges   days   strftimes	   localtimes   stat_end_times   debugMsgs   strs	   debugHosts   speedGraphDatas   dayGraphDatas   valuesPerDays   time_index_bases
   time_indexs   lens   barData0s   xs	   graphDatas   barData1s   barData2s	   lineData0s   indexs	   lineData1s	   lineData2s   outbound_maxvalues   inbound_maxvalues   total_maxvalues   traffic_total_outs   traffic_total_ins   traffic_totals   saveGraphDatas   filename(   s	   graphDatas
   speedCharts	   day_starts   dayNos
   time_indexs   daySpeedCharts   indexs   time_index_bases   dayGraphDatas   copys   days   day_stops   x(    (    s   C:\Python\PL\PL_Speed.pys   SplitReadDayÄ  sT    			 "N
  c         C   sÃ  d  k  } | i  | ƒ } d | _ t | _ d } d } t i	 t
 | i d d !d d ƒ ƒ } t d t | ƒ d	 t ƒx2t | | ƒ D]!} t d
 t | ƒ d	 t ƒt i d t i | | d d d ƒ ƒ | _ t i d t i | | d d ƒ ƒ | _ t d | i d | i d	 t ƒt | ƒ }	 t i	 t
 | i d ƒ ƒ | d }
 d } t d t t |	 i ƒ ƒ d	 t ƒxz t d t |	 i ƒ ƒ D]` } |  i | d c |	 i | 7<|  i | d c |	 i | 7<|  i | d c |	 i | 7<q‘Wt d t t |	 i ƒ ƒ d	 t ƒx6t d t |	 i ƒ ƒ D]} t  |
 | | ƒ } |  i | |	 i | j  o |	 i | |  i | <n |  i" | |	 i" | j  o |	 i" | |  i" | <n |  i# | |	 i# | j  o |	 i# | |  i# | <n |  i$ |	 i$ j  o |	 i$ |  _$ n |  i% |	 i% j  o |	 i% |  _% n |  i& |	 i& j  o |	 i& |  _& q1q1Wt d d	 t ƒ|  i' |	 i' 7_' |  i( |	 i( 7_( |  i) |	 i) 7_) t d d	 t ƒq† Wt* | i+ |  ƒ |  Sd  S(   Nih   i   i   i    i   s   -01-01s   %Y-%m-%ds   year_start = s   hosts
   monthNo = s   %Y-%m-01 00:00i   i€Q s	   Get data s    - i   s"   Processing bardata : len barData0=s$   Processing linedata : len lineData0=s   Processing totaldatas   Processing data done(,   s   copys
   speedCharts   monthSpeedCharts   stops   Month_charts
   chart_types   month_starts
   month_stops   times   mktimes   strptimes   stat_start_times
   year_starts   debugMsgs   strs	   debugHosts   ranges   monthNos   strftimes	   localtimes   stat_end_times   speedGraphDatas   monthGraphDatas   time_index_bases
   time_indexs   lens   barData0s   xs	   graphDatas   barData1s   barData2s	   lineData0s   ints   indexs	   lineData1s	   lineData2s   outbound_maxvalues   inbound_maxvalues   total_maxvalues   traffic_total_outs   traffic_total_ins   traffic_totals   saveGraphDatas   filename(   s	   graphDatas
   speedCharts   month_starts
   year_starts   monthNos
   time_indexs   indexs   monthSpeedCharts
   month_stops   monthGraphDatas   time_index_bases   copys   x(    (    s   C:\Python\PL\PL_Speed.pys   SplitReadMonth  s\    			& .*"## "# c   *      C   s…  t  i  ƒ  }& d  k } | i t t g j p
 | d j o
 d } n d d } d } t
 i t | i d d !ƒ ƒ o
 d } n d } | i d | | d	 d
 d ƒ } x | D]ˆ } t d | d | i d | i d t | i ƒ d t | i ƒ d t | i ƒ d | i ƒt | | i | i ƒ }) | |) 7} q© W| d j o | i t j oO | i t i d t d d !t i  d t d | ƒ d t d d !d ƒ n | d d  d	 … }' | d d  d	 … } t  i  ƒ  } t  i$ t% | i d ƒ ƒ t  i& |  _( d }" t t  i* d t  i+ t  i$ t% | i d ƒ ƒ ƒ ƒ ƒ d } | i t j o8 t | i d d !ƒ }$ d } | } | | |$ d } n d } | | } | | } t  i  ƒ  | } t  i  ƒ  } d }
 d } d }# d } d }% d }  d }! d d t
 i t | i d d !ƒ ƒ d d d d d d d d d d f } d d  d d! d! d f | i } | i t j o d }" | } xó | D]t } | | } |' | | | d! !i> ƒ  d" |  i? |" <| | | | d! !i> ƒ  d" |  i@ |" <|" d 7}" | | d! 7} qiWnt xp tA | | | ƒ D]\ }( |( | } |' | | | !i> ƒ  d" |  i? |( | <| | | | !i> ƒ  d" |  i@ |( | <qøW|# t  i  ƒ  | 7}# t  i  ƒ  } d d d  d d# d! f | i } d  kD } | iE | i d d !|' | ƒ \ }' } | t  i  ƒ  | 7} t  i  ƒ  } | i d$ j o | i d j oR| i d | | d	 d  d
 d ƒ } | i d | | d	 d  d
 d ƒ } x€ tH tA | | d  ƒ tA d tI | ƒ ƒ ƒ D]T \ }( }" |( | } |' | | d  !i> ƒ  d  | |" <| | | d  !i> ƒ  d  | |" <qxW| d  :} d }	 x÷ tA d |" | ƒ D]\ } | | | | !iK ƒ  d% |  iL | | <| | | | !iK ƒ  d% |  iM | | <|	 d 7}	 qóWn„ d }" xz tA | | | ƒ D]f }( |( | } |' | | | !iK ƒ  d% |  iL |( | <| | | | !iK ƒ  d% |  iM |( | <|" d 7}" qpW|% t  i  ƒ  | 7}% t  i  ƒ  } |
 t  i  ƒ  | 7}
 t  i  ƒ  } | t  i  ƒ  | 7} t  i  ƒ  } tK |  iL ƒ d& |  _N tK |  iM ƒ d& |  _O tK tP d' „  |  iL |  iM ƒ ƒ d& |  _Q |  t  i  ƒ  | 7}  t  i  ƒ  } tR d' „  |  i? ƒ |  _S tR d' „  |  i@ ƒ |  _T |  iT |  iS |  _U |! t  i  ƒ  | 7}! t  i  ƒ  } t  i  ƒ  } t d( | i d | i d t tI | ƒ ƒ d) t | |& ƒ d* t | | ƒ d+ d t ƒ|  Sd  S(,   Ni    i   i<   i   i   in  im  s   shapei   s   types   Int32s   Randomread s    s    - s    Chart_Type=s    daysInChart=s    5min=s   hosts   dats
   totalstat-s   %.4ds   -s   .dats   %Y-%m-%d %H:%Ms   %js   %Y-%m-%di   i   i   i   i   i   i   f60.0ix   s   1f8.0i   c         C   s   |  | S(   N(   s   xs   y(   s   xs   y(    (    s   C:\Python\PL\PL_Speed.pys   <lambda>  s    s   Read s    records in s    sec. Take care of data in s   sec.(W   s   times   timers   numarrays
   speedCharts
   chart_types
   Hour_charts	   Day_charts   daysInCharts   values_per_days   values_per_hours   calendars   isleaps   ints   stat_start_times   days_in_years   zeross	   year_datas   IP_addressess
   IP_addresss   debugMsgs   stat_end_times   strs	   flag_5mins	   debugHosts   random_reads	   host_datas
   numGroupIds
   Year_charts   tofiles   PL2_inis   PL_paths   oss   seps   year_inbounds   year_outbounds   timer2s   mktimes   strptimes   timezones	   graphDatas   time_index_adjs   cous   strftimes	   localtimes   record_numbers   hours
   from_indexs   to_indexs	   index_adjs	   time_inits   timings   time_As   time_0s   time_1s   time_2s   time_3s   time_4s   time_5s   time_index_specs   time_index_bars
   time_indexs   x2s   sums   barData0s   barData1s   ranges   xs   time_index_speeds   PL_CorrForSomeDayss   corrForSomeDays2s   inbound_5mins   outbound_5mins   zips   lens   cou2s   maxs	   lineData0s	   lineData1s   inbound_maxvalues   outbound_maxvalues   maps   total_maxvalues   reduces   traffic_total_ins   traffic_total_outs   traffic_totals   timer3(*   s	   graphDatas
   speedCharts   IP_addressess   daysInCharts
   numGroupIds	   index_adjs   days_in_years   inbound_5mins   x2s   cou2s   time_As   values_per_days
   time_indexs
   IP_addresss	   time_inits   numarrays   time_2s
   from_indexs   timer3s   timer2s   PL_CorrForSomeDayss   time_index_specs	   year_datas   time_index_bars   year_outbounds   values_per_hours   time_index_speeds   record_numbers   timings   time_0s   to_indexs   outbound_5mins   time_4s   time_5s   cous   time_1s   hours   time_3s   timers   year_inbounds   xs	   host_data(    (    s   C:\Python\PL\PL_Speed.pys   getDataFromRDBY  sØ    	#

 
  SO%:

G 
&&
 
&*	% $$+ 
#
 && 
&&( T
c         C   s  | i d j oM t t i j o0 t d t i d t i d t ƒt t	 ƒ n t i a nJ t t i j o0 t d t i d t i d t ƒt t	 ƒ n t i a t
 oÅ t d d t ƒd  k } t d d t ƒ| i ƒ  a	 t d t d t ƒt i ƒ  } t	 i h  d t <d t i <d	 t i <ƒ } | a
 t d
 t | ƒ d t t i ƒ  | ƒ d d t ƒn g  } t i ƒ  } t d | i d | i d | i d | i d | i ƒt	 i h  d | i <d | i <d | i <d d <ƒ } t | ƒ t j o
 g  } n t i ƒ  } t i d j o( t d t t | ƒ ƒ d d t ƒn t i t  | i d ƒ ƒ |  _" d } x| D]ú} t i d j od t d | d d t | d ƒ d t | d  ƒ d! t | d" ƒ d# t | d$ ƒ d t ƒn | d } | d d% d& !} | d d' d( !} | d d) d* !}
 t( | d$ | d  ƒ } t( | d" | d ƒ }	 |	 | } |  i, | d+ 7_, |  i- |	 d+ 7_- |  i. | d+ 7_. | i/ t0 j oh t1 i2 |
 d d !ƒ d+ t1 i2 |
 d, d% !ƒ t1 i2 | i d) d- !ƒ d+ t1 i2 | i d. d/ !ƒ d% } n | i/ t4 j o t1 i2 |
 d d !ƒ } n | i/ t5 j o1 t6 t i t  | d d0 ƒ ƒ |  i" d1 ƒ } n | i/ t7 j o t1 i2 | ƒ d } n | i/ t8 j o t1 i2 | ƒ d } n |  i9 | c |	 d+ 7<|  i: | c | d+ 7<d  k; } | i< | d d d/ !ƒ } | o" |	 | }	 | | } | | } n | |  i> j o | |  _> n |	 |  i? j o |	 |  _? n | |  i@ j o | |  _@ n | i/ t0 j od t1 i2 |
 d d !ƒ d+ t1 i2 |
 d, d% !ƒ t1 i2 | i d) d- !ƒ d+ t1 i2 | i d. d/ !ƒ } n | i/ t4 j o6 t1 i2 |
 d d !ƒ d+ t1 i2 |
 d, d% !ƒ d% } n | i/ t5 j o5 t6 t i t  | d d ƒ ƒ |  i" d+ d2 ƒ } n | i/ t7 j oK t1 i2 | ƒ d d3 t1 i2 |
 d d !ƒ d+ t1 i2 |
 d, d% !ƒ d4 } n | i/ t8 j o
 d } n |  iA | |	 d' j  o |	 d' |  iA | <n |  iB | | d' j  o | d' |  iB | <qˆqˆWt i ƒ  } t d5 | i d | i d t | ƒ d6 t | | ƒ d7 t | | ƒ d8 d | i ƒtD | iE |  ƒ |  Sd  S(9   Ns   2004-03-27 00:00s   Changing server from s    to s   hosts+   Start MakeSpeedGraph : import statlogic!!!!s   klar !!!!++++s   Connecting s   users   passwords   Status connect = s    och det tog s
    sekunder.s   Fetch data s    - s   , Host: s    s   starts   ends   ips   -i   s    speeds s     s   %Y-%m-%d %H:%Mi    i   s   Time s   times    ServerInbound s   server_inbounds    ServerOutbound s   server_outbounds    ClientInbound s   client_inbounds    ClientOutbound s   client_outboundi   i   i   i
   i   i   i<   i   i   i   i   s   %Y-%m-%di€Q i   i   ix   s   Reads    records in s    sec. Take care of data in s   sec.(F   s
   speedCharts   stat_start_times
   PL_addresss   PL1_inis   PL2_addresss   debugMsgs   PL1_addresss	   debugHosts   disconnectFromPLservers   stats	   connecteds	   statlogics   news   times   timers   connects   PL_users   PL_passwords   zs   strs   speedss   stat_end_times
   IP_addresss   hostnames   hspeed_querys   types   longs   timer2s   PL2_inis   debugs   lens   mktimes   strptimes	   graphDatas   time_index_adjs   cous   xs	   month_strs   day_strs   time_strs   floats   outbounds   inbounds   totals   traffic_total_outs   traffic_total_ins   traffic_totals
   chart_types
   Hour_charts   strings   atois
   time_indexs	   Day_charts
   Week_charts   ints   Month_charts
   Year_charts   barData0s   barData1s   PL_CorrForSomeDayss   corrForSomeDayss   divisors   outbound_maxvalues   inbound_maxvalues   total_maxvalues	   lineData0s	   lineData1s   timer3s   saveGraphDatas   filename(   s	   graphDatas
   speedCharts	   statlogics	   month_strs
   time_indexs   totals   outbounds   timer3s   timer2s   inbounds   time_strs   cous   divisors   timers   PL_CorrForSomeDayss   day_strs   xs   zs   speeds(    (    s   C:\Python\PL\PL_Speed.pys   getDataFromPL,  s°     ""		0:;< 
( V

h1	

d65K
  [c         C   s=  d  k  }
 d  k } t d t | i ƒ d t | i ƒ d | i ƒ| i } | i } | d d !| d d !j o t i	 | d ƒ } n
 d | _
 | d d !} | d d !} t d t | ƒ d	 t | ƒ d | i ƒ| i t j o
 d
 } n | i
 d
 } t d t | ƒ d t | i
 ƒ ƒ |
 i i | i | | | ƒ a t d t t t ƒ ƒ d ƒ t i ƒ  } }	 | i d | d d ƒ } | i d | d d ƒ } d } x– t D]Ž } t | d d d ƒ d j o  t | d d d ƒ | | <n t | d d d ƒ d j o  t | d d d ƒ | | <n | d 7} qªWt d t t i ƒ  | ƒ d ƒ t i ƒ  } | i t j o4 t | i d d !ƒ } d } d } | d d } n d } t | ƒ } d } d d t" i# t | i d d !ƒ ƒ d d  d d  d d d  d d  d f } d d d d d d! d d! d d f | i } t d" t | ƒ d# t | ƒ d$ t | ƒ d t ƒ| i t& j oŸ d } | } x| D]„ } | } | | | | d! d !i* ƒ  d% d |  i, | <| | | | d! d !i* ƒ  d% d |  i- | <| d 7} | | d! d 7} q•Wn| xx t. | | | ƒ D]d } | | } | | | | !i* ƒ  d% d |  i, | | <| | | | !i* ƒ  d% d |  i- | | <q4Wt d& t t i ƒ  | ƒ d ƒ t i ƒ  } d  k/ } | i0 | | | ƒ \ } } d d d d d  d d' d d! d f | i } | i t j o d d } n d } xæ t. | | | ƒ D]Ò } | | } yP | | | | !i2 ƒ  d( |  i3 | | <| | | | !i2 ƒ  d( |  i4 | | <Wne | i t j | d j @oD |  i3 | d | |  i3 | | <|  i4 | d | |  i4 | | <qn X| d 7} qTWt d) t t i ƒ  | ƒ d ƒ t i ƒ  } t2 |  i3 ƒ d |  _5 t2 |  i4 ƒ d |  _6 t2 t7 d* „  |  i3 |  i4 ƒ ƒ d |  _8 t9 d* „  |  i, ƒ |  _: t9 d* „  |  i- ƒ |  _; |  i; |  i: |  _< t d+ t t i ƒ  | ƒ d ƒ t d, t t i ƒ  |	 ƒ d ƒ |  Sd  S(-   Ns   speedChart.stat_start_time=s   speedChart.stat_end_time=s   hosti    i
   i€®þÿi   s   stat_start_time=s   stat_end_time=i   s   measurepoints=s   daysInChart=s   Take care of data from PL2: s    recordss   shapes   types   Int32s   iniè  i   s   outs   Prepare PL2-data took s    sec.i   i   i   i<   i   i   i   i   i   i   s   from_index=s
    to_index=s    time_index_bar=f60.0s   Build BarChartData took ix   f8.0s   Build LineChartData took c         C   s   |  | S(   N(   s   xs   y(   s   xs   y(    (    s   C:\Python\PL\PL_Speed.pys   <lambda>F  s    s   Update maxvalue, total took s   Take care of PL2-data took (=   s   PL2_PLDBs   numarrays   debugMsgs   strs
   speedCharts   stat_start_times   stat_end_times	   debugHosts	   time_miscs   time_adjs   daysInCharts
   chart_types
   Hour_charts   measurepointss   pldbs   hostStatisticss	   netObjects
   graph_lists   lens   times   timers   timer1s   zeross   data_inbounds   data_outbounds   indexs   xs   floats   ints   graph_start_times   hours
   from_indexs   to_indexs	   index_adjs   calendars   isleaps   time_index_specs   time_index_bars
   Year_charts   cous
   time_indexs   x2s   sums	   graphDatas   barData0s   barData1s   ranges   PL2_CorrForSomeDayss   corrForSomeDaysPL2s   time_index_speeds   maxs	   lineData0s	   lineData1s   inbound_maxvalues   outbound_maxvalues   maps   total_maxvalues   reduces   traffic_total_ins   traffic_total_outs   traffic_total(   s	   graphDatas
   speedCharts	   index_adjs   time_index_bars   data_inbounds
   time_indexs   indexs   numarrays   measurepointss   timer1s   PL2_PLDBs   stat_start_times   time_index_specs   data_outbounds
   from_indexs   x2s   to_indexs   time_index_speeds   cous   stat_end_times   hours   PL2_CorrForSomeDayss   timers   x(    (    s   C:\Python\PL\PL_Speed.pys   getDataFromPL2Ã  s°    		 1			+
%   "G/6 ..
 
*."	/ 
&* $"(""c         C   s~  |  i t t g j oþd  k } t ƒ  } d } |  i |  i	 j  o |  i	 |  _ n |  i t j ocd } g  } h  } t i ƒ  \ } } }	 t i |  i ƒ t i t i ƒ j o |  i d j oWd | } | i i |  i	 |  i | ƒ } xq| i d ƒ D]} x| D]} | d | d | d <| i ƒ  | d j oÓ t | d d	 t | d ƒ d
 t | d ƒ d t | d ƒ d |  i d t  ƒ| | j  o5 | d | d <| i ƒ  | d <| i! | i" ƒ  ƒ n/ | t# d d c | d 7<d | t# d d <| d 7} qqWqõ WnFxB| i d ƒ D]1}
 d | d |
 i ƒ  d |	 } | i i |  i	 |  i | ƒ } xê | D]â } | i& i! | d ƒ | d | d | d <|  i i d ƒ d | d i d ƒ j oˆ | | j  o? | d | d <| i d ƒ t i' | d <| i! | i" ƒ  ƒ n/ | t# d d c | d 7<d | t# d d <| d 7} qoqoWq$Wx? | D]7 } d G| GH| i) i! | d ƒ | i* i! | d ƒ q`Wt d |  i d t | ƒ d t  ƒn3d  k+ } | i, |  ƒ } t. d ƒ | _/ t. d ƒ | _0 d } x× t1 t2 | i3 ƒ ƒ D]À } | | j  o= | i) i! | i4 | ƒ | i* i! | i3 | | i5 | ƒ n; d | i) | d <| i* | d c | i3 | | i5 | 7<| i/ | i3 | 7_/ | i0 | i5 | 7_0 | d 7} qW| i/ | i0 | _6 d | _7 d |  _8 t9 i: |  ƒ d  Sn |  i t; j o3d  k } g  | _< g  | _= g  | _> |  i |  i	 j  o |  i	 |  _ n t i ƒ  \ } } }	 d } t i |  i ƒ t i t i ƒ j o |  i d j ogd | } | i i |  i	 |  i | ƒ } x| i d ƒ D]'} x| D]} | d | d | d <| i ƒ  | d j oã t | d d	 t | d ƒ d
 t | d ƒ d t | d ƒ d |  i d t  ƒ| i ƒ  } t2 | ƒ d j o | d d !d | d } n | iA i! | ƒ | i< i! t. | d ƒ ƒ | i= i! t. | d ƒ ƒ | d 7} q q WqóWnáxÝ| i d ƒ D]Ì}
 d | d |
 i ƒ  d |	 } t t | ƒ d t  ƒ| i i |  i	 |  i | ƒ } t t t2 | ƒ ƒ d d t  ƒxO| D]G} | i& i! | d ƒ | d | d | d <|  i i d ƒ d | d i d ƒ j oí t | d d	 t | d ƒ d
 t | d ƒ d t | d ƒ d |  i d t  ƒ| i d ƒ t i' } t2 | ƒ d j o | d d !d | d } n | iA i! | ƒ | i< i! t. | d ƒ ƒ | i= i! t. | d ƒ ƒ | d 7} q³q³Wq2WtB |  _C d |  _8 d |  _D t d |  i d t | ƒ d t  ƒt9 i: |  ƒ d  Sn |  i tE j od  k } g  | _< g  | _= g  | _> |  i |  i	 j  o |  i	 |  _ n t iF d } | i i |  i	 |  i | ƒ } xï | D]ç } |  i i d ƒ d | d i d ƒ j o· | i& i! | d ƒ | d | d | d <t | d d	 t | d ƒ d
 t | d ƒ d t | d ƒ d |  i d t  ƒ| i< i! t. | d ƒ ƒ | i= i! t. | d ƒ ƒ qà	qà	Wt i } | i i |  i	 |  i | ƒ } x| D]} |  i i d ƒ d | d i d ƒ j o t2 | i< ƒ oÍ | i& i! | d ƒ | d | d | d <t | d d	 t | d ƒ d
 t | d ƒ d t | d ƒ d |  i d t  ƒ| i< i! t. | d ƒ | i< d ƒ | i= i! t. | d ƒ | i= d ƒ qù
qù
Wd d g | _A tB |  _C d |  _8 d |  _D d } t d |  i d t | ƒ d t  ƒt9 i: |  ƒ d  Sn |  i tG j oò d  k+ } d  kH } d  k" } | i" |  ƒ } g  | _J g  | _K | iL |  ƒ } xn t1 t2 | i4 ƒ ƒ D]W } |  i d | i4 | | _ | iM | ƒ } | iJ i! | ƒ | iK i! | i4 | ƒ qåWt d t |  iO ƒ d  t | iO ƒ d t  ƒd  Sn d  Sd  S(!   Ni
   i    s   /s   ,s   ins   outs   traffic_totals   names    Tot=s    In=s    Out=s    IP-address=s   hosts   values   labeli   s   Others   priorityiÿÿÿÿs&   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxs   IP_address=s	    Sectors=i	   s   
s    recordss   1s    Bars=s   Internets   Regionali   s   speedGraph.daysInChart=s    multiChart.daysInChart=(P   s
   speedGraphs   charts	   Pie_charts	   BGP_charts   PL2_PLDBs   Sorters   sorts   max_sectorss   stat_end_times   stat_start_times   sectors   services   pieDatas
   PL2_configs   splitBGPstatPaths   PL2_BGP_PathRoots   PL2_BGP_statPathObjs   PL2_BGP_nodePaths   PL_miscs   removeDataBeforeSlashs	   netObjects   PL2_inis   PL2_nodePaths
   IP_addresss   pldbs   stat_node_lists   nodes   splits   datas   strips   debugMsgs   strs	   debugHosts   appends   copys
   max_sectors	   BGPObjects	   graphDatas   clickableLabelss   PL2_BGP_statPathIds   xs
   pie_labelss   pie_datas
   PL_Toplists   getPL2ToplistGraphDatas   toplistGraphDatas   floats   traffic_total_ins   traffic_total_outs   ranges   lens   toplistData0s   toplistLabelss   toplistData1s   traffic_totals   pie_explodes   userdef_labels	   drawgraphs   findGraphHostnames   BGP_barcharts   barData0s   barData1s   barData2s   cous   labels
   bar_labelss   customGraphs   graphs   reverseLookups   Tankmater_charts   PL2_BGP_statPaths	   TCP_charts   PL_Speeds
   multiCharts   areaDatas   area_labelss   toplistDatas   getSpeedGraphDatas   graphDataTCPs   daysInChart(   s
   speedGraphs	   graphDatas   sectors   nodes
   multiCharts   PL2_BGP_PathRoots	   netObjects   copys   services   PL2_BGP_nodePaths	   BGPObjects   PL_Speeds   PL2_PLDBs   pieDatas   sorts   max_sectorss
   PL_Toplists   PL2_BGP_statPathObjs   toplistGraphDatas   datas   graphDataTCPs   cous   labels   x(    (    s   C:\Python\PL\PL_Speed.pys   getSpecGraphDataS  sX   		5
  U   * 	) 	 &)						5
  U    *U			%				 *U"	 :U%-			%		 .c         C   s^  t  i t  i |  i ƒ t  i |  i ƒ ƒ } t i t	 |  i
 d d !d d ƒ ƒ } |  i t j oö d  k } xê t d d ƒ D]Õ } | d } t i d t i | d d	 | d ƒ ƒ }	 t i d t i | d d	 | ƒ ƒ }
 | i i |	 |
 |  i ƒ } d } xB | D]: } | d
 d j o | d d d j o | d 7} qqW| | i | <qy Wn | Sd  S(   Ni    i   s   -01-01s   %Y-%m-%di   i   s   %Y-%m-01 00:00i   i€Q s   ins   outi   iÜ  (   s	   drawgraphs	   GraphDatas   sizeBarGraphDatas
   speedCharts
   chart_types   sizeLineGraphDatas	   graphDatas   times   mktimes   strptimes   stat_start_times   time_tmps
   Year_charts   PL2_PLDBs   ranges   indexs   months   strftimes	   localtimes   stat_end_times   pldbs   stat_node_lists	   netObjects   nodes   cous   xs   barData0(   s
   speedCharts   nodes   indexs   cous   time_tmps   PL2_PLDBs	   graphDatas   months   xs   stat_start_times   stat_end_time(    (    s   C:\Python\PL\PL_Speed.pys   getHostCouDatai  s"    *&	 
+' &c         C   s;   t  o0 |  i ƒ  } t d t | ƒ d t ƒd a  n d  S(   Ns   Disconnect status s   hosti    (   s	   connecteds   stats
   disconnects   cs   debugMsgs   strs	   debugHost(   s   stats   c(    (    s   C:\Python\PL\PL_Speed.pys   disconnectFromPLserver„  s
     c         C   sI  t  d |  ƒ t |  d ƒ } t i | i | d ƒ t i | i | d ƒ t i | i	 | d ƒ t i | i
 | d ƒ t i | i | d ƒ t i | i | d ƒ t i | i | d ƒ t i | i | d ƒ t i | i | d ƒ t i | i | d ƒ t i | i | d ƒ t i | i | d ƒ t i | i | d ƒ | i ƒ  d  S(   Ns   Saveing s   wbi   (   s   debugMsgs   filenames   opens   oufs   cPickles   dumps	   graphDatas   barData0s   barData1s   barData2s	   lineData0s	   lineData1s	   lineData2s   traffic_total_outs   traffic_total_ins   traffic_totals   outbound_maxvalues   inbound_maxvalues   total_maxvalues   time_index_adjs   close(   s   filenames	   graphDatas   ouf(    (    s   C:\Python\PL\PL_Speed.pys   saveGraphDataŽ  s     c         C   s1  t  d |  d t ƒt i d d ƒ } t |  d ƒ } t i	 | ƒ | _
 t i	 | ƒ | _ t i	 | ƒ | _ t i	 | ƒ | _ t i	 | ƒ | _ t i	 | ƒ | _ t i	 | ƒ | _ t i	 | ƒ | _ t i	 | ƒ | _ t i	 | ƒ | _ t i	 | ƒ | _ t i	 | ƒ | _ t i	 | ƒ | _ | i ƒ  | Sd  S(   Ns   Loading s   hosti    s   rb(   s   debugMsgs   filenames	   debugHosts	   drawgraphs	   GraphDatas	   graphDatas   opens   infs   cPickles   loads   barData0s   barData1s   barData2s	   lineData0s	   lineData1s	   lineData2s   traffic_total_outs   traffic_total_ins   traffic_totals   outbound_maxvalues   inbound_maxvalues   total_maxvalues   time_index_adjs   close(   s   filenames	   graphDatas   inf(    (    s   C:\Python\PL\PL_Speed.pys   loadGraphData¢  s$    
c   	      C   s5  t  d |  d | d | d t ƒd  k } d d } t i d | d d	 !t	 i
 |  d
 | d d	 !d } t  | d t ƒt i ƒ  } t i t | d d	 !ƒ ƒ o
 d } n d } t	 i i | ƒ o$ | i d | | d d d ƒ a n@ t | d ƒ } | i d ƒ | i | d d d | | d ƒa t Sd  S(   Ns	   Reading  s    s    - s   hosti<   i   s   dati    i   s   -s   .datin  im  s   shapei   s   types   Int32s   r+b(   s   debugMsgs
   IP_addresss   stat_start_times   stat_end_times	   debugHosts   numarrays   values_per_days   PL2_inis   PL_paths   oss   seps   filenames   times   timer1s   calendars   isleaps   ints   days_in_years   paths   existss   zeross	   year_datas   opens   files   seeks   fromfile(	   s
   IP_addresss   stat_start_times   stat_end_times   days_in_years   numarrays   filenames   timer1s   values_per_days   file(    (    s   C:\Python\PL\PL_Speed.pys   random_readº  s     $	 
6
$#c         C   sì  t  i oÞd  k } t i ƒ  } t i d t i | ƒ ƒ } t i ƒ  } y | i	 d } Wn d } n Xd } d } t i ƒ  }
 d } | d j oB d } y t i | ƒ } Wn n Xt | ƒ o | d } qÔ n t i ƒ  }	 t  i d	 | i | d
 | d
 | d i t i d d ƒ d ƒ } yP t d | ƒ t | d ƒ } | i | d
 |  d
 | d
 | ƒ | i ƒ  Wn t d | d ƒ n Xt i ƒ  } t d t! |
 | ƒ d | d t! |	 |
 ƒ d t! | |	 ƒ d ƒ n d  S(   Ns   %Y-%m-%d %H:%M:%Ss   REMOTE_ADDRs	   127.0.0.1s    s   0s   Xs   1i    s   logs    s   .txts   :-s   Logfilename = s   ws$   ************ Error writing logfile: s    ***************s   Find remote address took s    sec. ReverseLookup = s
    and took s   sec. Write loggfile took s    sec.("   s   PL2_inis   developments   oss   times   todays   strftimes	   localtimes
   event_times   timer1s   environs
   IP_addresss   thenames   hostnames   timer2s   revs   sockets   gethostbyaddrs   lens   timer3s   PL_paths   seps	   translates   strings	   maketranss   filenames   debugMsgs   opens
   outputfiles   writes   imageURLs   routins   closes   timer4s   str(   s   routins   imageURLs
   outputfiles
   event_times
   IP_addresss   hostnames   revs   filenames   timer4s   timer3s   timer2s   timer1s   todays   thenames   os(    (    s   C:\Python\PL\PL_Speed.pys   loggPLgraphUseÝ  s@    
	
 D%(,   s   PL_debugs   PL_consts   PL_miscs   sorts   Sorters   PL1_inis   PL2_inis	   drawgraphs
   PL2_exports   numarrays   cgis   oss   times	   time_miscs   calendars   cPickles   strptimes   sockets   strings
   pychartdirs   PL2_Packetlogics
   PL2_configs	   connecteds
   PL_addresss   Nones   stats	   debugHosts   SpeedGraphImages   prepGraphTimes   speedGraphDatas   speedGraphGroupDatas   getSpeedGraphDatas   SplitReadDays   SplitReadMonths   getDataFromRDBs   getDataFromPLs   getDataFromPL2s   getSpecGraphDatas   getHostCouDatas   disconnectFromPLservers   saveGraphDatas   loadGraphDatas   random_reads   loggPLgraphUse(#   s   SplitReadDays   cPickles   SpeedGraphImages   calendars   PL2_Packetlogics   loggPLgraphUses   numarrays   getSpecGraphDatas   getHostCouDatas   strptimes   Sorters   SplitReadMonths   loadGraphDatas   getDataFromRDBs
   PL2_configs   cgis   PL1_inis   strings   getSpeedGraphDatas	   time_miscs   random_reads   disconnectFromPLservers
   PL2_exports   saveGraphDatas   PL2_inis   sockets	   drawgraphs   prepGraphTimes   speedGraphDatas   getDataFromPLs   times   PL_miscs   getDataFromPL2s   speedGraphGroupDatas   os(    (    s   C:\Python\PL\PL_Speed.pys   ?   sZ   																		’	2	6	K	@	D	QÓ	—		ÿ 		
			#	ÿ 