rda-python-metrics 1.0.48__tar.gz → 1.0.50__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. {rda_python_metrics-1.0.48/src/rda_python_metrics.egg-info → rda_python_metrics-1.0.50}/PKG-INFO +1 -1
  2. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/pyproject.toml +1 -1
  3. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/PgIPInfo.py +28 -11
  4. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillosdfusage.py +2 -2
  5. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/filltdsusage.py +23 -26
  6. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50/src/rda_python_metrics.egg-info}/PKG-INFO +1 -1
  7. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/LICENSE +0 -0
  8. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/MANIFEST.in +0 -0
  9. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/README.md +0 -0
  10. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/setup.cfg +0 -0
  11. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/PgView.py +0 -0
  12. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/__init__.py +0 -0
  13. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillawsusage.py +0 -0
  14. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillawsusage.usg +0 -0
  15. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillcdgusage.py +0 -0
  16. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillcdgusage.usg +0 -0
  17. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillcodusage.py +0 -0
  18. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillcodusage.usg +0 -0
  19. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillcountry.py +0 -0
  20. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillendtime.py +0 -0
  21. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillgdexusage.py +0 -0
  22. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillgdexusage.usg +0 -0
  23. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillglobususage.py +0 -0
  24. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillglobususage.usg +0 -0
  25. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillipinfo.py +0 -0
  26. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillipinfo.usg +0 -0
  27. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/filloneorder.py +0 -0
  28. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/filloneorder.usg +0 -0
  29. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillosdfusage.usg +0 -0
  30. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillrdadb.py +0 -0
  31. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillrdadb.usg +0 -0
  32. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/filltdsusage.usg +0 -0
  33. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/filluser.py +0 -0
  34. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/filluser.usg +0 -0
  35. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/fillzenodousage.py +0 -0
  36. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/logarch.py +0 -0
  37. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/logarch.usg +0 -0
  38. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/pgperson.py +0 -0
  39. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/pgsyspath.py +0 -0
  40. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/pgusername.py +0 -0
  41. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewallusage.py +0 -0
  42. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewallusage.usg +0 -0
  43. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewawsusage.py +0 -0
  44. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewawsusage.usg +0 -0
  45. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewcheckusage.py +0 -0
  46. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewcheckusage.usg +0 -0
  47. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewcodusage.py +0 -0
  48. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewcodusage.usg +0 -0
  49. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewordusage.py +0 -0
  50. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewordusage.usg +0 -0
  51. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewosdfusage.py +0 -0
  52. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewosdfusage.usg +0 -0
  53. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewrqstusage.py +0 -0
  54. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewrqstusage.usg +0 -0
  55. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewtdsusage.py +0 -0
  56. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewtdsusage.usg +0 -0
  57. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewwebfile.py +0 -0
  58. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewwebfile.usg +0 -0
  59. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewwebusage.py +0 -0
  60. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics/viewwebusage.usg +0 -0
  61. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics.egg-info/SOURCES.txt +0 -0
  62. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics.egg-info/dependency_links.txt +0 -0
  63. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics.egg-info/entry_points.txt +0 -0
  64. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics.egg-info/requires.txt +0 -0
  65. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/src/rda_python_metrics.egg-info/top_level.txt +0 -0
  66. {rda_python_metrics-1.0.48 → rda_python_metrics-1.0.50}/tests/test_metrics.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rda_python_metrics
3
- Version: 1.0.48
3
+ Version: 1.0.50
4
4
  Summary: RDA Python Package to gather and view data usage metrics
5
5
  Author-email: Zaihua Ji <zji@ucar.edu>
6
6
  Project-URL: Homepage, https://github.com/NCAR/rda-python-metrics
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "rda_python_metrics"
9
- version = "1.0.48"
9
+ version = "1.0.50"
10
10
  authors = [
11
11
  { name="Zaihua Ji", email="zji@ucar.edu" },
12
12
  ]
@@ -31,6 +31,7 @@ IPINFO = {
31
31
  'IPADD' : 0
32
32
  }
33
33
 
34
+ GIP = '0.0.0.0'
34
35
  IPDNS = None
35
36
  IPDB = None
36
37
  G2DB = None
@@ -140,8 +141,10 @@ def get_ipinfo_record(ip):
140
141
  return None
141
142
 
142
143
  if 'bogon' in iprec and iprec['bogon']:
143
- PgLOG.pglog(f"ipinfo: {ip} - bogon", PgLOG.LOGWRN)
144
- return None
144
+ PgLOG.pglog(f"ipinfo: {ip} - bogon, use {GIP}", PgLOG.LOGWRN)
145
+ IPRECS[ip] = PgDBI.pgget('ipinfo', '*', f"ip = '{GIP}'", PgLOG.LGEREX)
146
+ return IPRECS[ip]
147
+
145
148
  record = {'ip' : ip, 'stat_flag' : 'A', 'hostname' : ip, 'org_type' : '-'}
146
149
  get_ip_hostname(ip, iprec, record)
147
150
  record['lat'] = float(iprec['latitude']) if iprec['latitude'] else 0
@@ -243,7 +246,9 @@ def set_ipinfo(ip, ipopt = True):
243
246
  if not pgrec or ipopt and pgrec['stat_flag'] == 'M':
244
247
  record = get_ipinfo_record(ip) if ipopt else None
245
248
  if not record: record = get_geoip2_record(ip)
246
- if record and update_ipinfo_record(record, pgrec): pgrec = record
249
+ if record:
250
+ update_ipinfo_record(record, pgrec)
251
+ pgrec = record
247
252
 
248
253
  IPRECS[ip] = pgrec
249
254
  return pgrec
@@ -272,7 +277,9 @@ def get_missing_ipinfo(ip, email = None):
272
277
  if ipinfo:
273
278
  record = {'org_type' : ipinfo['org_type'],
274
279
  'country' : ipinfo['country'],
275
- 'region' : ipinfo['region']}
280
+ 'region' : ipinfo['region'],
281
+ 'hostname' : ipinfo['hostname'],
282
+ 'ip' : ipinfo['ip']}
276
283
  if not email or re.search(r'-$', email):
277
284
  record['email'] = 'unknown@' + ipinfo['hostname']
278
285
  else:
@@ -289,21 +296,31 @@ def get_wuser_record(ip, date, email = None):
289
296
  if not record: return None
290
297
 
291
298
  emcond = "email = '{}'".format(record['email'])
292
- flds = 'wuid, email, org_type, country, region, start_date'
299
+ flds = 'wuid, start_date'
293
300
  pgrec = PgDBI.pgget("wuser", flds, emcond, PgLOG.LOGERR)
294
301
  if pgrec:
302
+ record['wuid'] = pgrec['wuid']
295
303
  if PgUtil.diffdate(pgrec['start_date'], date) > 0:
296
- pgrec['start_date'] = record['start_date'] = date
297
- PgDBI.pgupdt('wuser', record, emcond)
298
- return pgrec
304
+ PgDBI.pgupdt('wuser', new_wuser_record(record, date, False), emcond)
305
+ return record
299
306
 
300
307
  # now add one in
301
- record['stat_flag'] = 'A'
302
- record['start_date'] = date
303
- wuid = PgDBI.pgadd("wuser", record, PgLOG.LOGERR|PgLOG.AUTOID)
308
+ wuid = PgDBI.pgadd("wuser", new_wuser_record(record, date), PgLOG.LOGERR|PgLOG.AUTOID)
304
309
  if wuid:
305
310
  record['wuid'] = wuid
306
311
  PgLOG.pglog("{} Added as wuid({})".format(record['email'], wuid), PgLOG.LGWNEM)
307
312
  return record
308
313
 
309
314
  return None
315
+
316
+ def new_wuser_record(iprec, date, nuser = True):
317
+
318
+ wurec = {'start_date' : date}
319
+ wurec['org_type'] = iprec['org_type']
320
+ wurec['country'] = iprec['country']
321
+ wurec['region'] = iprec['region']
322
+ if nuser:
323
+ wurec['email'] = iprec['email']
324
+ wurec['stat_flag'] = 'A'
325
+
326
+ return wurec
@@ -133,7 +133,7 @@ def fill_osdf_usages(fnames):
133
133
  dsid = ms.group(2)
134
134
  site = ms.group(3)
135
135
  ip = ms.group(4)
136
- if ip == 'N/A': ip = '0.0.0.0'
136
+ if ip == 'N/A': ip = PgIPInfo.GIP
137
137
  engine = ms.group(5)
138
138
  size = int(ms.group(6))
139
139
  if re.match(r'^N/A', engine, re.I):
@@ -153,7 +153,7 @@ def fill_osdf_usages(fnames):
153
153
  (year, quarter, date, time) = get_record_date_time(dt)
154
154
  iprec = PgIPInfo.get_missing_ipinfo(ip)
155
155
  if not iprec: continue
156
- records[key] = {'ip' : ip, 'dsid' : dsid, 'date' : date, 'time' : time, 'quarter' : quarter,
156
+ records[key] = {'ip' : iprec['ip'], 'dsid' : dsid, 'date' : date, 'time' : time, 'quarter' : quarter,
157
157
  'size' : size, 'fcount' : 1, 'method' : method, 'engine' : engine,
158
158
  'org_type' : iprec['org_type'], 'country' : iprec['country'],
159
159
  'region' : iprec['region'], 'email' : iprec['email'], 'site' : site}
@@ -36,7 +36,8 @@ USAGE = {
36
36
  'GITDIR' : PgLOG.PGLOG["GDEXWORK"] + "/zji/tdslogs/tds-logs",
37
37
  'GITGET' : 'git pull',
38
38
  'TDSDIR' : PgLOG.PGLOG["GDEXWORK"] + "/zji/tdslogs/work",
39
- 'TDSGET' : 'gunzip -c ../tds-logs/logs/{} > {}',
39
+ 'GZFILE' : '../tds-logs/logs/{}.gz',
40
+ 'TDSGET' : 'gunzip -c {} > {}',
40
41
  'TDSLOG' : "localhost_access_log.{}.txt" # {} = YYYY-MM-DD
41
42
  }
42
43
 
@@ -123,16 +124,17 @@ def fill_tds_usages(fnames):
123
124
 
124
125
  year = cntall = addall = 0
125
126
  for logfile in fnames:
126
- gzfile = logfile + '.gz'
127
- PgLOG.pgsystem(USAGE['TDSGET'].format(gzfile, logfile), 5, PgLOG.LOGWRN)
128
- linfo = PgFile.check_local_file(gzfile)
129
- if not linfo:
130
- PgLOG.pglog("{}: Not exists for Gathering TDS usage".format(gzfile), PgLOG.LOGWRN)
131
- continue
132
- PgFile.compress_local_file(gzfile)
133
127
  linfo = PgFile.check_local_file(logfile)
134
128
  if not linfo:
135
- PgLOG.pglog("{}: Error gunzip TDS usage".format(gzfile), PgLOG.LGEREX)
129
+ gzfile = USAGE['GZFILE'].format(logfile)
130
+ linfo = PgFile.check_local_file(gzfile)
131
+ if not linfo:
132
+ PgLOG.pglog("{}: Not exists for Gathering TDS usage".format(gzfile), PgLOG.LOGWRN)
133
+ continue
134
+ PgLOG.pgsystem(USAGE['TDSGET'].format(gzfile, logfile), 5, PgLOG.LOGWRN)
135
+ linfo = PgFile.check_local_file(logfile)
136
+ if not linfo:
137
+ PgLOG.pglog("{}: Error gunzip TDS usage".format(gzfile), PgLOG.LGEREX)
136
138
  PgLOG.pglog("{}: Gathering TDS usage at {}".format(logfile, PgLOG.current_datetime()), PgLOG.LOGWRN)
137
139
  tds = PgFile.open_local_file(logfile)
138
140
  if not tds: continue
@@ -162,6 +164,9 @@ def fill_tds_usages(fnames):
162
164
  ebuf = ms.group(9)
163
165
  ms = re.search(r' "(\w+.*\S+)" ', ebuf)
164
166
  engine = ms.group(1) if ms else 'Unknown'
167
+ iprec = PgIPInfo.set_ipinfo(ip)
168
+ if not iprec: continue
169
+ ip = iprec['ip']
165
170
  key = "{}:{}:{}:{}".format(ip, dsid, method, etype)
166
171
 
167
172
  if key in records:
@@ -199,24 +204,16 @@ def add_usage_records(records, date):
199
204
  quarter = 1 + int((int(ms.group(2)) - 1)/3)
200
205
  for key in records:
201
206
  record = records[key]
202
- cond = "date = '{}' AND time = '{}' AND ip = '{}'".format(date, record['time'], record['ip'])
207
+ cond = "date = '{}' AND time = '{}' AND ip = '{}' AND dsid = '{}'".format(date, record['time'], record['ip'], record['dsid'])
203
208
  if PgDBI.pgget(USAGE['PGTBL'], '', cond, PgLOG.LGEREX): continue
204
- if record['email'] == '-':
205
- wurec = PgIPInfo.get_wuser_record(record['ip'], date)
206
- if not wurec: continue
207
- record['org_type'] = wurec['org_type']
208
- record['country'] = wurec['country']
209
- record['region'] = wurec['region']
210
- record['email'] = 'unknown@' + wurec['hostname']
211
- else:
212
- wuid = PgDBI.check_wuser_wuid(record['email'], date)
213
- if not wuid: continue
214
- pgrec = PgDBI.pgget("wuser", "org_type, country, region", "wuid = {}".format(wuid), PgLOG.LGWNEX)
215
- if not pgrec: continue
216
- record['org_type'] = pgrec['org_type']
217
- record['country'] = pgrec['country']
218
- record['region'] = pgrec['region']
219
-
209
+ email = None if record['email'] == '-' else record['email']
210
+ wurec = PgIPInfo.get_wuser_record(record['ip'], date)
211
+ if not wurec: continue
212
+ record['ip'] = wurec['ip'] # in case generic ip
213
+ record['org_type'] = wurec['org_type']
214
+ record['country'] = wurec['country']
215
+ record['region'] = wurec['region']
216
+ record['email'] = 'unknown@' + wurec['hostname']
220
217
  record['quarter'] = quarter
221
218
  record['date'] = date
222
219
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rda_python_metrics
3
- Version: 1.0.48
3
+ Version: 1.0.50
4
4
  Summary: RDA Python Package to gather and view data usage metrics
5
5
  Author-email: Zaihua Ji <zji@ucar.edu>
6
6
  Project-URL: Homepage, https://github.com/NCAR/rda-python-metrics