def read(fname, raise_on_error=False): try: fd = open(fname, 'r') try: fcntl.flock(fd, fcntl.LOCK_SH | fcntl.LOCK_NB) lines = fd.readlines() finally: fd.close() except IOError as e: if raise_on_error: raise else: return [] # no file -> no downtimes ############################################################################# out = [] lnr = 0 for long_line in lines: lnr += 1 line = long_line.strip() if len(line) == 0: continue # ignore empty lines if line[0:1] == '#': continue # ignore comments arr = line.split() # Read in lines of the downtime file # Start End Entry Security_Class Comment if len(arr) < 2: if raise_on_error: raise ValueError("%s:%i: Expected pair, got '%s'" % (fname, lnr, line)) else: continue # ignore malformed lines try: start_time = timeConversion.extractISO8601_Local(arr[0]) except ValueError as e: if raise_on_error: raise ValueError("%s:%i: 1st element: %s" % (fname, lnr, e)) else: continue #ignore errors try: if arr[1] == 'None': end_time = None else: end_time = timeConversion.extractISO8601_Local(arr[1]) except ValueError as e: if raise_on_error: raise ValueError("%s:%i: 2nd element: %s" % (fname, lnr, e)) else: continue #ignore errors out.append((start_time, end_time)) return out # out is a list
def read(fname, raise_on_error=False): try: fd = open(fname, 'r') try: fcntl.flock( fd, fcntl.LOCK_SH | fcntl.LOCK_NB ) lines = fd.readlines() finally: fd.close() except IOError as e: if raise_on_error: raise else: return [] # no file -> no downtimes ############################################################################# out=[] lnr=0 for long_line in lines: lnr += 1 line = long_line.strip() if len(line)==0: continue # ignore empty lines if line[0:1]=='#': continue # ignore comments arr = line.split() # Read in lines of the downtime file # Start End Entry Security_Class Comment if len(arr) < 2: if raise_on_error: raise ValueError("%s:%i: Expected pair, got '%s'"%(fname, lnr, line)) else: continue # ignore malformed lines try: start_time = timeConversion.extractISO8601_Local(arr[0]) except ValueError as e: if raise_on_error: raise ValueError("%s:%i: 1st element: %s"%(fname, lnr, e)) else: continue #ignore errors try: if arr[1]=='None': end_time=None else: end_time = timeConversion.extractISO8601_Local(arr[1]) except ValueError as e: if raise_on_error: raise ValueError("%s:%i: 2nd element: %s"%(fname, lnr, e)) else: continue #ignore errors out.append((start_time, end_time)) return out # out is a list
def endDowntime(fname,end_time=None,entry="All",frontend="All",security_class="All",comment=""): comment=comment.replace("\r", " "); comment=comment.replace("\n", " "); if end_time is None: end_time=long(time.time()) try: fd=open(fname,'r+') except IOError: return 0 # no file -> nothing to end try: fcntl.flock(fd,fcntl.LOCK_EX) # read the old info inlines=fd.readlines() outlines=[] lnr=0 closed_nr=0 for long_line in inlines: lnr+=1 line=long_line.strip() if len(line)==0: outlines.append(long_line) continue # pass on empty lines if line[0:1]=='#': outlines.append(long_line) continue # pass on comments arr=line.split() if len(arr)<2: outlines.append(long_line) continue # pass on malformed lines #make sure this is for the right entry if ((entry!="All")and(len(arr)>2)and(entry!=arr[2])): outlines.append(long_line) continue if ((entry=="All")and(len(arr)>2)and("factory"==arr[2])): outlines.append(long_line) continue if ((frontend!="All")and(len(arr)>3)and(frontend!=arr[3])): outlines.append(long_line) continue #make sure that this time tuple applies to this security_class if ((security_class!="All")and(len(arr)>4)and(security_class!=arr[4])): outlines.append(long_line) continue cur_start_time=0 if arr[0]!='None': cur_start_time=timeConversion.extractISO8601_Local(arr[0]) if arr[1]!='None': cur_end_time=timeConversion.extractISO8601_Local(arr[1]) if arr[1]=='None' or ((cur_start_time<long(time.time())) and (cur_end_time>end_time)): # open period -> close outlines.append("%-30s %-30s"%(arr[0],timeConversion.getISO8601_Local(end_time))) if (len(arr)>2): sep=" "; t=2 for param in arr[2:]: if t<5: outlines.append("%s%-20s" % (sep,param)); else: outlines.append("%s%s" % (sep,param)); t=t+1 if (comment!=""): outlines.append("; %s" % (comment)); outlines.append("\n"); closed_nr+=1 else: # closed just pass on outlines.append(long_line) #Keep parsing file, since there may be multiple downtimes #pass # end for # go back to start to rewrite fd.seek(0) fd.writelines(outlines) fd.truncate() finally: fd.close() return closed_nr
lnr+=1 line=long_line.strip() if len(line)==0: continue # ignore empty lines if line[0:1]=='#': continue # ignore comments arr=line.split() # Read in lines of the downtime file # Start End Entry Security_Class Comment if len(arr)<2: if raise_on_error: raise ValueError, "%s:%i: Expected pair, got '%s'"%(fname,lnr,line) else: continue # ignore malformed lines try: start_time=timeConversion.extractISO8601_Local(arr[0]) except ValueError,e: if raise_on_error: raise ValueError, "%s:%i: 1st element: %s"%(fname,lnr,e) else: continue #ignore errors try: if arr[1]=='None': end_time=None else: end_time=timeConversion.extractISO8601_Local(arr[1]) except ValueError,e: if raise_on_error: raise ValueError, "%s:%i: 2nd element: %s"%(fname,lnr,e) else:
def endDowntime(fname, end_time=None): if end_time is None: end_time = long(time.time()) try: fd = open(fname, 'r+') except IOError: return 0 # no file -> nothing to end try: fcntl.flock(fd, fcntl.LOCK_EX | fcntl.LOCK_NB) # read the old info inlines = fd.readlines() outlines = [] lnr = 0 closed_nr = 0 for long_line in inlines: lnr += 1 line = long_line.strip() if len(line) == 0: outlines.append(long_line) continue # pass on empty lines if line[0:1] == '#': outlines.append(long_line) continue # pass on comments arr = line.split() if len(arr) < 2: outlines.append(long_line) continue # pass on malformed lines #make sure this is for the right entry #if ((entry!="All")and(len(arr)>2)and(entry!=arr[2])): # outlines.append(long_line) # continue #if ((entry=="All")and(len(arr)>2)and("factory"==arr[2])): # outlines.append(long_line) # continue #if ((frontend!="All")and(len(arr)>3)and(frontend!=arr[3])): # outlines.append(long_line) # continue #make sure that this time tuple applies to this security_class #if ((security_class!="All")and(len(arr)>4)and(security_class!=arr[4])): # outlines.append(long_line) # continue cur_start_time = 0 cur_end_time = 0 if arr[0] != 'None': cur_start_time = timeConversion.extractISO8601_Local(arr[0]) if arr[1] != 'None': cur_end_time = timeConversion.extractISO8601_Local(arr[1]) # open period -> close if arr[1] == 'None' or ((cur_start_time < long(time.time())) and (cur_end_time > end_time)): outlines.append( "%-30s %-30s" % (arr[0], timeConversion.getISO8601_Local(end_time))) outlines.append("\n") closed_nr += 1 else: outlines.append(long_line) # closed just pass on #Keep parsing file, since there may be multiple downtimes #pass # end for # go back to start to rewrite fd.seek(0) fd.writelines(outlines) fd.truncate() finally: fd.close() return closed_nr
def purgeOldPeriods(fname, cut_time=None, raise_on_error=False): if cut_time is None: cut_time = long(time.time()) elif cut_time <= 0: cut_time = long(time.time()) + cut_time try: fd = open(fname, 'r+') except IOError as e: if raise_on_error: raise else: return 0 # no file -> nothing to purge try: fcntl.flock(fd, fcntl.LOCK_EX) # read the old info inlines = fd.readlines() outlines = [] lnr = 0 cut_nr = 0 for long_line in inlines: lnr += 1 line = long_line.strip() if len(line) == 0: outlines.append(long_line) continue # pass on empty lines if line[0:1] == '#': outlines.append(long_line) continue # pass on comments arr = line.split() if len(arr) < 2: if raise_on_error: raise ValueError("%s:%i: Expected pair, got '%s'" % (fname, lnr, line)) else: outlines.append(long_line) continue # pass on malformed lines try: if arr[1] == 'None': end_time = None else: end_time = timeConversion.extractISO8601_Local(arr[1]) except ValueError as e: if raise_on_error: raise ValueError("%s:%i: 2nd element: %s" % (fname, lnr, e)) else: outlines.append(long_line) continue #unknown, pass on if end_time is None: outlines.append(long_line) continue #valid forever, pass on if end_time >= cut_time: outlines.append(long_line) continue # end_time after cut_time, have to keep it # if we got here, the period ended before the cut date... cut it cut_nr += 1 pass # end for # go back to start to rewrite fd.seek(0) fd.writelines(outlines) fd.truncate() finally: fd.close() return cut_nr
def read(fname, raise_on_error=False): try: fd = open(fname, 'r') try: fcntl.flock(fd, fcntl.LOCK_SH) lines = fd.readlines() finally: fd.close() except IOError as e: if raise_on_error: raise else: return [] # no file -> no downtimes out = [] lnr = 0 for long_line in lines: lnr += 1 line = long_line.strip() if len(line) == 0: continue # ignore empty lines if line[0:1] == '#': continue # ignore comments arr = line.split() # Read in lines of the downtime file # Start End Entry Security_Class Comment if len(arr) < 2: if raise_on_error: raise ValueError("%s:%i: Expected pair, got '%s'" % (fname, lnr, line)) else: continue # ignore malformed lines try: start_time = timeConversion.extractISO8601_Local(arr[0]) except ValueError as e: if raise_on_error: raise ValueError("%s:%i: 1st element: %s" % (fname, lnr, e)) else: continue #ignore errors try: if arr[1] == 'None': end_time = None else: end_time = timeConversion.extractISO8601_Local(arr[1]) except ValueError as e: if raise_on_error: raise ValueError("%s:%i: 2nd element: %s" % (fname, lnr, e)) else: continue #ignore errors # Addition. If more arguments exists, parse # Entry, Frontend, Security_Class, Comment if (len(arr) >= 3): entry = arr[2] else: entry = "factory" if (len(arr) >= 3): frontend = arr[3] else: frontend = "All" if (len(arr) >= 4): security_class = arr[4] else: security_class = "All" if (len(arr) >= 5): comment = arr[5:] else: comment = "" out.append( (start_time, end_time, entry, frontend, security_class, comment)) # end for long_line in lines: return out
def read(fname, raise_on_error=False): try: fd=open(fname, 'r') try: fcntl.flock(fd, fcntl.LOCK_SH) lines=fd.readlines() finally: fd.close() except IOError as e: if raise_on_error: raise else: return [] # no file -> no downtimes out=[] lnr=0 for long_line in lines: lnr+=1 line=long_line.strip() if len(line)==0: continue # ignore empty lines if line[0:1]=='#': continue # ignore comments arr=line.split() # Read in lines of the downtime file # Start End Entry Security_Class Comment if len(arr)<2: if raise_on_error: raise ValueError("%s:%i: Expected pair, got '%s'"%(fname, lnr, line)) else: continue # ignore malformed lines try: start_time=timeConversion.extractISO8601_Local(arr[0]) except ValueError as e: if raise_on_error: raise ValueError("%s:%i: 1st element: %s"%(fname, lnr, e)) else: continue #ignore errors try: if arr[1]=='None': end_time=None else: end_time=timeConversion.extractISO8601_Local(arr[1]) except ValueError as e: if raise_on_error: raise ValueError("%s:%i: 2nd element: %s"%(fname, lnr, e)) else: continue #ignore errors # Addition. If more arguments exists, parse # Entry, Frontend, Security_Class, Comment if (len(arr)>=3): entry=arr[2] else: entry="factory" if (len(arr)>=3): frontend=arr[3] else: frontend="All" if (len(arr)>=4): security_class=arr[4] else: security_class="All" if (len(arr)>=5): comment=arr[5:] else: comment="" out.append((start_time, end_time, entry, frontend, security_class, comment)) # end for long_line in lines: return out
def purgeOldPeriods(fname,cut_time=None, raise_on_error=False): if cut_time is None: cut_time=long(time.time()) elif cut_time<=0: cut_time=long(time.time())+cut_time try: fd=open(fname, 'r+') except IOError as e: if raise_on_error: raise else: return 0 # no file -> nothing to purge try: fcntl.flock(fd, fcntl.LOCK_EX) # read the old info inlines=fd.readlines() outlines=[] lnr=0 cut_nr=0 for long_line in inlines: lnr+=1 line=long_line.strip() if len(line)==0: outlines.append(long_line) continue # pass on empty lines if line[0:1]=='#': outlines.append(long_line) continue # pass on comments arr=line.split() if len(arr)<2: if raise_on_error: raise ValueError("%s:%i: Expected pair, got '%s'"%(fname, lnr, line)) else: outlines.append(long_line) continue # pass on malformed lines try: if arr[1]=='None': end_time=None else: end_time=timeConversion.extractISO8601_Local(arr[1]) except ValueError as e: if raise_on_error: raise ValueError("%s:%i: 2nd element: %s"%(fname, lnr, e)) else: outlines.append(long_line) continue #unknown, pass on if end_time is None: outlines.append(long_line) continue #valid forever, pass on if end_time>=cut_time: outlines.append(long_line) continue # end_time after cut_time, have to keep it # if we got here, the period ended before the cut date... cut it cut_nr+=1 pass # end for # go back to start to rewrite fd.seek(0) fd.writelines(outlines) fd.truncate() finally: fd.close() return cut_nr
def test_ISO8601_Local__symmetric(self, flt_time): t = long(flt_time) tstr = getISO8601_Local(flt_time) self.assertEqual(t, extractISO8601_Local(getISO8601_Local(flt_time))) self.assertEqual(tstr, getISO8601_Local(extractISO8601_Local(tstr)))
def test_extract_is_o8601__local(self): os.environ['TZ'] = tz time.tzset() self.assertEqual(now, extractISO8601_Local(iso_local)) self.assertEqual(now_dst, extractISO8601_Local(iso_local_dst))
def endDowntime(fname, end_time=None, entry="All", frontend="All", security_class="All", comment=""): comment = comment.replace("\r", " ") comment = comment.replace("\n", " ") if end_time is None: end_time = long(time.time()) try: fd = open(fname, 'r+') except IOError: return 0 # no file -> nothing to end with fd: fcntl.flock(fd, fcntl.LOCK_EX) # read the old info inlines = fd.readlines() outlines = [] lnr = 0 closed_nr = 0 for long_line in inlines: lnr += 1 line = long_line.strip() if len(line) == 0: outlines.append(long_line) continue # pass on empty lines if line[0:1] == '#': outlines.append(long_line) continue # pass on comments arr = line.split() if len(arr) < 2: outlines.append(long_line) continue # pass on malformed lines # make sure this is for the right entry if (entry != "All") and (len(arr) > 2) and (entry != arr[2]): outlines.append(long_line) continue if (entry == "All") and (len(arr) > 2) and ("factory" == arr[2]): outlines.append(long_line) continue if (frontend != "All") and (len(arr) > 3) and (frontend != arr[3]): outlines.append(long_line) continue # make sure that this time tuple applies to this security_class if (security_class != "All") and (len(arr) > 4) and (security_class != arr[4]): outlines.append(long_line) continue cur_start_time = 0 if arr[0] != 'None': cur_start_time = timeConversion.extractISO8601_Local(arr[0]) if arr[1] != 'None': cur_end_time = timeConversion.extractISO8601_Local(arr[1]) # logic short circuit guarantees that cur_end_time is defined (arr[1] != 'None') if arr[1] == 'None' or ((cur_start_time < long(time.time())) and (cur_end_time > end_time)): # open period -> close outlines.append("%-30s %-30s"%(arr[0], timeConversion.getISO8601_Local(end_time))) if len(arr) > 2: sep = " " t = 2 for param in arr[2:]: if t < 5: outlines.append("%s%-20s" % (sep, param)) else: outlines.append("%s%s" % (sep, param)) t = t + 1 if comment != "": outlines.append("; %s" % (comment,)) outlines.append("\n") closed_nr += 1 else: # closed just pass on outlines.append(long_line) # Keep parsing file, since there may be multiple downtimes # pass # end for # go back to start to rewrite fd.seek(0) fd.writelines(outlines) fd.truncate() return closed_nr