51    """The routine that kicks off processing a ref file""" 
   58    filename = options.filepath
 
   60    with open(filename, 
'r') 
as ref_file:
 
   62            if 'constructor' not in line 
and 'destructor' not in line:
 
   67            tokens = line.strip().split(
',', 7)
 
   70            if 'constructor' in state:
 
   71                split_state = state.split(
"**")
 
   72                if len(split_state) < 4:
 
   73                    print(
"File does not contain object size information", file=sys.stderr)
 
   76                obj_type = 
'%s:%s:%s' % (tokens[3], tokens[4], tokens[5])
 
   77                if obj_type 
not in object_types:
 
   78                    object_types[obj_type] = {
 
   83                overhead = int(split_state[2])
 
   84                user_data = int(split_state[3])
 
   85                obj = objects[addr] = {
 
   87                    'user_data': user_data,
 
   93                if addr 
not in objects:
 
   99                obj_type = obj[
'obj_type']
 
  100                if '**lock-state:unused**' in state:
 
  101                    object_types[obj_type][
'unused'] += 1
 
  102                elif '**lock-state:used**' in state:
 
  103                    object_types[obj_type][
'used'] += 1
 
  106            update_stats(current, peak, total, 
'count', direction, 1)
 
  107            update_stats(current, peak, total, 
'overhead', direction, obj[
'overhead'])
 
  108            update_stats(current, peak, total, 
'user_data', direction, obj[
'user_data'])
 
  109            update_stats(current, peak, total, 
'totalmem', direction, obj[
'overhead'] + obj[
'user_data'])
 
  111    print(
"Total usage statistics:")
 
  112    print(
"%20s: %d" % (
"Count", total[
'count']))
 
  113    print(
"%20s: %d" % (
"Total Memory (k)", total[
'totalmem'] / 1024))
 
  114    print(
"%20s: %d (%.2f%%)" % (
"Overhead (k)", total[
'overhead'] / 1024, total[
'overhead'] * 100.0 / total[
'totalmem']))
 
  115    print(
"%20s: %d" % (
"User Data (k)", total[
'user_data'] / 1024))
 
  117    print(
"Peak usage statistics:")
 
  118    print(
"%20s: %d" % (
"Count", peak[
'count']))
 
  119    print(
"%20s: %d" % (
"Total Memory (k)", peak[
'totalmem'] / 1024))
 
  120    print(
"%20s: %d (%.2f%%)" % (
"Overhead (k)", peak[
'overhead'] / 1024, peak[
'overhead'] * 100.0 / peak[
'totalmem']))
 
  121    print(
"%20s: %d" % (
"User Data (k)", peak[
'user_data'] / 1024))
 
  124    lockbyobj = {
'used': 0, 
'total': 0}
 
  125    lockbytype = {
'used': 0, 
'total': 0}
 
  126    for (allocator, info) 
in object_types.items():
 
  127        lockbyobj[
'used'] += info[
'used']
 
  128        lockbyobj[
'total'] += info[
'used'] + info[
'unused']
 
  130        if info[
'used'] != 0:
 
  131            lockbytype[
'used'] += 1
 
  132        elif info[
'unused'] == 0:
 
  135        lockbytype[
'total'] += 1
 
  137    print(
"Lock usage statistics:")
 
  138    print(
"%20s: %d of %d used (%.2f%%)" % (
 
  142        lockbyobj[
'used'] * 100.0 / lockbyobj[
'total']))
 
  143    print(
"%20s: %d of %d used (%.2f%%)" % (
 
  147        lockbytype[
'used'] * 100.0 / lockbytype[
'total']))
 
 
  151    """Main entry point for the script""" 
  158    parser = OptionParser()
 
  160    parser.add_option(
"-f", 
"--file", action=
"store", type=
"string",
 
  161                      dest=
"filepath", default=
"/var/log/asterisk/refs",
 
  162                      help=
"The full path to the refs file to process")
 
  164    (options, args) = parser.parse_args(argv)
 
  166    if not os.path.isfile(options.filepath):
 
  167        print(
"File not found: %s" % options.filepath, file=sys.stderr)
 
  172    except (KeyboardInterrupt, SystemExit, IOError):
 
  173        print(
"File processing cancelled", file=sys.stderr)