ADCT Python
Python client API implementation for publishing ADCT data
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
ldms_blob_file_to_http_post.BlobReader Class Reference

Public Member Functions

 __init__ (self, path, blobScanner=None)
 

Public Attributes

 filepath_name
 
 filetime
 
 filesuff
 
 time_least
 
 time_minexp
 
 blobs
 
 fileprefix
 
 filetiming_name
 
 filetiming_always__name
 
 filestype_name
 
 fileoffset_name
 
 datfile
 
 stypefile
 
 timingfile
 
 offsetfile
 
 stype
 
 timing
 
 offset
 
 stype_fsize
 
 timing_fsize
 
 offset_fsize
 

Constructor & Destructor Documentation

◆ __init__()

ldms_blob_file_to_http_post.BlobReader.__init__ (   self,
  path,
  blobScanner = None 
)
Parse DAT file named by path and matching aux files.
Apply blobScanner to each blob.

If blobScanner is not supplied, the entire data file gets loaded into memory
and the list self.blobs gets populated. This temporarily requires memory
size at least 2*(the DAT file size).

If blobScanner is supplied, individual blobs are loaded, scanned, and dropped.
215 def __init__(self, path, blobScanner=None):
216 """Parse DAT file named by path and matching aux files.
217Apply blobScanner to each blob.
218
219If blobScanner is not supplied, the entire data file gets loaded into memory
220and the list self.blobs gets populated. This temporarily requires memory
221size at least 2*(the DAT file size).
222
223If blobScanner is supplied, individual blobs are loaded, scanned, and dropped.
224"""
225 if sys.byteorder != 'little':
226 raise ValueError("this script does not work on bigendian platforms")
227 self.filepath_name = path
228 self.filetime = '0'
229 self.filesuff = None
230 self.time_least = 0 ; # least timestamp file entry for any blob
231 self.time_minexp = 0 ; # least time expected based on filename timestamp
232 self.blobs = []
233 try:
234 parts = path.split(".")
235 self.filetime = parts[-1]
236 self.time_minexp = int(self.filetime) - 70 ; # one minuteish margin for long delivery
237 self.filesuff = parts[-2]
238 self.fileprefix = ".".join(parts[0:len(parts)-2]) ; # strip .DAT.$timestamp
239 #self.filetiming_name = ".".join([self.fileprefix, "TIMING", self.filetime])
240 self.filetiming_name = ".".join([self.fileprefix, "noTIMING", self.filetime])
241 self.filetiming_always__name = ".".join([self.fileprefix, "TIMING", self.filetime])
242 self.filestype_name = ".".join([self.fileprefix, "TYPE", self.filetime])
243 self.fileoffset_name = ".".join([self.fileprefix, "OFFSET", self.filetime])
244 except:
245 raise ValueError("bad path for BlobReader: %s. expecting *.DAT.$timestamp format" % path)
246
247 self.datfile = open(self.filepath_name, "rb")
248 self.stypefile = None
249 try:
250 self.stypefile = open(self.filestype_name, "rb")
251 except:
252 pass # BlobReader __init__ TYPE file not found is ok. assume data is json
253 try:
254 self.timingfile = open(self.filetiming_name, "rb")
255 except:
256 self.timingfile = None
257 try:
258 self.offsetfile = open(self.fileoffset_name, "rb")
259 except:
260 self.offsetfile = None
261 self.stype = None
262 self.timing = None
263 self.offset = None
264 if self.stypefile:
265 self.stype = self.stypefile.read()
266 self.stype_fsize = os.path.getsize(self.filestype_name)
267 #self.stype.fromfile(self.stypefile, self.stype_fsize)
268 magic = str(self.stype[0:7], 'utf-8')
269 if magic != "blobtyp":
270 raise ValueError("non-type data in %s." % self.filestype_name)
271 self.stype = str(self.stype[8:], 'utf-8').strip()
272 if self.timingfile:
273 self.timing = array.array('Q')
274 self.timing_fsize = os.path.getsize(self.filetiming_name)
275 if (self.timing_fsize % 16) != 8:
276 raise ValueError("timing data in %s is not a multiple of 16 bytes + 8." % self.filetiming_name)
277 self.timing.fromfile(self.timingfile, self.timing_fsize//8)
278 magic = self.timing[0] ; # "blobtim" as le binary expected
279 if magic != 0x6d6974626f6c62:
280 raise ValueError("non-timing data in %s %x." % (self.filetiming_name , magic))
281 self.timing.pop(0)
282 if self.offsetfile:
283 self.offset = array.array('Q')
284 self.offset_fsize = os.path.getsize(self.fileoffset_name)
285 if (self.offset_fsize % 8) != 0:
286 raise ValueError("offset data in %s is not a multiple of 8 bytes." % self.fileoffset_name)
287 self.offset.fromfile(self.offsetfile, self.offset_fsize//8)
288 magic = self.offset[0] ; # "bloboff" as le binary expected
289 if magic != 0x66666f626f6c62:
290 raise ValueError("non-offset data in %s." % self.fileoffset_name)
291 self.offset.pop(0)
292 if blobScanner:
293 pass # BlobReader __init__ blobScanner argument not yet supported
294 else:
295 if not self.offset:
296 self.blobs = self.datfile.read().split(b'\x00')[1:-1] ; # skip magic
297 blen = len(self.blobs)
298 while i > 0:
299 i -= 1
300 inp = self.blobs[i].decode('utf-8').rstrip()
301 if len(inp) < 2:
302 self.blobs.pop[i]
303 # print("split on nul")
304 # print("len 0 ", str(len(self.blobs[0])))
305 # print("len last ", str(len(self.blobs[-1])))
306 # print("len last-1 ", str(len(self.blobs[-2])))
307 else:
308 for i in readline0(self.datfile):
309 inp = i.decode('utf-8').rstrip()
310 if len(inp) >= 2:
311 self.blobs.append(inp)
312 self.blobs.pop(0) ; # remove magic
313 # print("readline-iter")
314 # print("len 0 ", str(len(self.blobs[0])))
315 # print("len last ", str(len(self.blobs[-1])))
316 # print("len last-1 ", str(len(self.blobs[-2])))
317

Member Data Documentation

◆ blobs

ldms_blob_file_to_http_post.BlobReader.blobs

◆ datfile

ldms_blob_file_to_http_post.BlobReader.datfile

◆ fileoffset_name

ldms_blob_file_to_http_post.BlobReader.fileoffset_name

◆ filepath_name

ldms_blob_file_to_http_post.BlobReader.filepath_name

◆ fileprefix

ldms_blob_file_to_http_post.BlobReader.fileprefix

◆ filestype_name

ldms_blob_file_to_http_post.BlobReader.filestype_name

◆ filesuff

ldms_blob_file_to_http_post.BlobReader.filesuff

◆ filetime

ldms_blob_file_to_http_post.BlobReader.filetime

◆ filetiming_always__name

ldms_blob_file_to_http_post.BlobReader.filetiming_always__name

◆ filetiming_name

ldms_blob_file_to_http_post.BlobReader.filetiming_name

◆ offset

ldms_blob_file_to_http_post.BlobReader.offset

◆ offset_fsize

ldms_blob_file_to_http_post.BlobReader.offset_fsize

◆ offsetfile

ldms_blob_file_to_http_post.BlobReader.offsetfile

◆ stype

ldms_blob_file_to_http_post.BlobReader.stype

◆ stype_fsize

ldms_blob_file_to_http_post.BlobReader.stype_fsize

◆ stypefile

ldms_blob_file_to_http_post.BlobReader.stypefile

◆ time_least

ldms_blob_file_to_http_post.BlobReader.time_least

◆ time_minexp

ldms_blob_file_to_http_post.BlobReader.time_minexp

◆ timing

ldms_blob_file_to_http_post.BlobReader.timing

◆ timing_fsize

ldms_blob_file_to_http_post.BlobReader.timing_fsize

◆ timingfile

ldms_blob_file_to_http_post.BlobReader.timingfile

The documentation for this class was generated from the following file: