rda-python-metrics 3.0.7__tar.gz → 3.0.9__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 (87) hide show
  1. {rda_python_metrics-3.0.7/src/rda_python_metrics.egg-info → rda_python_metrics-3.0.9}/PKG-INFO +1 -1
  2. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/pyproject.toml +1 -1
  3. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/pg_ipinfo.py +25 -13
  4. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9/src/rda_python_metrics.egg-info}/PKG-INFO +1 -1
  5. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/LICENSE +0 -0
  6. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/MANIFEST.in +0 -0
  7. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/README.md +0 -0
  8. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/setup.cfg +0 -0
  9. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/PgIPInfo.py +0 -0
  10. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/PgView.py +0 -0
  11. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/__init__.py +0 -0
  12. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fill_awsusage.py +0 -0
  13. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fill_cdgusage.py +0 -0
  14. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fill_codusage.py +0 -0
  15. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fill_country.py +0 -0
  16. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fill_endtime.py +0 -0
  17. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fill_globususage.py +0 -0
  18. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fill_ipinfo.py +0 -0
  19. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fill_oneorder.py +0 -0
  20. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fill_osdfusage.py +0 -0
  21. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fill_rdadb.py +0 -0
  22. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fill_tdsusage.py +0 -0
  23. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillawsusage.py +0 -0
  24. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillawsusage.usg +0 -0
  25. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillcdgusage.py +0 -0
  26. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillcdgusage.usg +0 -0
  27. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillcodusage.py +0 -0
  28. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillcodusage.usg +0 -0
  29. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillcountry.py +0 -0
  30. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillendtime.py +0 -0
  31. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillgdexusage.py +0 -0
  32. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillgdexusage.usg +0 -0
  33. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillglobususage.py +0 -0
  34. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillglobususage.usg +0 -0
  35. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillipinfo.py +0 -0
  36. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillipinfo.usg +0 -0
  37. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/filloneorder.py +0 -0
  38. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/filloneorder.usg +0 -0
  39. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillosdfusage.py +0 -0
  40. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillosdfusage.usg +0 -0
  41. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillrdadb.py +0 -0
  42. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillrdadb.usg +0 -0
  43. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/filltdsusage.py +0 -0
  44. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/filltdsusage.usg +0 -0
  45. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillzenodousage.py +0 -0
  46. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/fillzenodousage.usg +0 -0
  47. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/log_arch.py +0 -0
  48. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/logarch.py +0 -0
  49. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/logarch.usg +0 -0
  50. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/pg_view.py +0 -0
  51. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/pgsyspath.py +0 -0
  52. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/view_allusage.py +0 -0
  53. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/view_awsusage.py +0 -0
  54. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/view_checkusage.py +0 -0
  55. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/view_codusage.py +0 -0
  56. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/view_ordusage.py +0 -0
  57. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/view_osdfusage.py +0 -0
  58. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/view_rqstusage.py +0 -0
  59. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/view_tdsusage.py +0 -0
  60. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/view_webfile.py +0 -0
  61. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/view_webusage.py +0 -0
  62. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewallusage.py +0 -0
  63. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewallusage.usg +0 -0
  64. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewawsusage.py +0 -0
  65. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewawsusage.usg +0 -0
  66. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewcheckusage.py +0 -0
  67. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewcheckusage.usg +0 -0
  68. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewcodusage.py +0 -0
  69. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewcodusage.usg +0 -0
  70. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewordusage.py +0 -0
  71. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewordusage.usg +0 -0
  72. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewosdfusage.py +0 -0
  73. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewosdfusage.usg +0 -0
  74. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewrqstusage.py +0 -0
  75. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewrqstusage.usg +0 -0
  76. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewtdsusage.py +0 -0
  77. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewtdsusage.usg +0 -0
  78. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewwebfile.py +0 -0
  79. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewwebfile.usg +0 -0
  80. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewwebusage.py +0 -0
  81. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics/viewwebusage.usg +0 -0
  82. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics.egg-info/SOURCES.txt +0 -0
  83. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics.egg-info/dependency_links.txt +0 -0
  84. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics.egg-info/entry_points.txt +0 -0
  85. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics.egg-info/requires.txt +0 -0
  86. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/src/rda_python_metrics.egg-info/top_level.txt +0 -0
  87. {rda_python_metrics-3.0.7 → rda_python_metrics-3.0.9}/tests/test_metrics.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rda_python_metrics
3
- Version: 3.0.7
3
+ Version: 3.0.9
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 = "3.0.7"
9
+ version = "3.0.9"
10
10
  authors = [
11
11
  { name="Zaihua Ji", email="zji@ucar.edu" },
12
12
  ]
@@ -47,6 +47,7 @@ class PgIPInfo(PgUtil, PgDBI):
47
47
  self.DMRECS = {}
48
48
  self.IPDMS = {}
49
49
  self.IPNRM = {}
50
+ self.IPSKP = {}
50
51
  self.COUNTRIES = {}
51
52
 
52
53
  def normalize_ip(self, ip):
@@ -101,7 +102,7 @@ class PgIPInfo(PgUtil, PgDBI):
101
102
 
102
103
  def get_country_record_code(self, cname, kname = None):
103
104
  """Get country code from name."""
104
- name = cname[kname] if kname else cname
105
+ name = cname.get(kname) if kname else cname
105
106
  name = name.replace(' ', '.').upper() if name else 'UNITED.STATES'
106
107
  if name == 'CHINA': name = 'P.R.CHINA'
107
108
  return name
@@ -176,11 +177,14 @@ class PgIPInfo(PgUtil, PgDBI):
176
177
  log file. Doing the new ones up front, several at a time, leaves the host names
177
178
  in self.IPDMS for get_ip_hostname() to pick up without waiting again.
178
179
  """
179
- ips = [ip for ip in {self.normalize_ip(ip) for ip in ips} if ip and ip not in self.IPDMS]
180
+ ips = [ip for ip in {self.normalize_ip(ip) for ip in ips}
181
+ if ip and ip not in self.IPDMS and ip not in self.IPSKP]
180
182
  if not ips: return 0
181
183
  # ips on file are either reused as is or refreshed by ipinfo, which carries its
182
- # own host name, so only the ones not on file are worth resolving ahead of time
184
+ # own host name, so only the ones not on file are worth resolving ahead of time.
185
+ # remember which ones those were, or every later log file queries them again
183
186
  recorded = self.get_recorded_ips(ips)
187
+ self.IPSKP.update(recorded)
184
188
  newips = [ip for ip in ips if ip not in recorded]
185
189
  if not newips: return 0
186
190
  self.get_dns_resolver() # create the shared resolver before starting the threads
@@ -237,16 +241,24 @@ class PgIPInfo(PgUtil, PgDBI):
237
241
  self.IPRECS[ip] = self.pgget('ipinfo', '*', f"ip = '{self.GIP}'", self.LGEREX)
238
242
  return self.IPRECS[ip]
239
243
  record = {'ip' : ip, 'stat_flag' : 'A', 'hostname' : ip, 'org_type' : '-'}
240
- self.get_ip_hostname(ip, iprec, record)
241
- record['lat'] = float(iprec['latitude']) if iprec['latitude'] else 0
242
- record['lon'] = float(iprec['longitude']) if iprec['longitude'] else 0
243
- if 'org' in iprec: record['org_name'] = iprec['org']
244
- record['country'] = self.get_country_record_code(iprec, 'country_name')
245
- record['region'] = self.convert_chars(iprec['region']) if 'region' in iprec else None
246
- if 'city' in iprec: record['city'] = self.convert_chars(iprec['city'])
247
- if 'postal' in iprec: record['postal'] = iprec['postal']
248
- record['timezone'] = iprec['timezone']
249
- record['ipinfo'] = json.dumps(iprec)
244
+ try:
245
+ self.get_ip_hostname(ip, iprec, record)
246
+ # latitude and longitude are derived from 'loc', which a sparse ipinfo
247
+ # answer leaves out altogether, as it does timezone and country name
248
+ record['lat'] = float(iprec['latitude']) if iprec.get('latitude') else 0
249
+ record['lon'] = float(iprec['longitude']) if iprec.get('longitude') else 0
250
+ if 'org' in iprec: record['org_name'] = iprec['org']
251
+ record['country'] = self.get_country_record_code(iprec, 'country_name')
252
+ record['region'] = self.convert_chars(iprec['region']) if 'region' in iprec else None
253
+ if 'city' in iprec: record['city'] = self.convert_chars(iprec['city'])
254
+ if 'postal' in iprec: record['postal'] = iprec['postal']
255
+ record['timezone'] = iprec.get('timezone')
256
+ record['ipinfo'] = json.dumps(iprec)
257
+ except (KeyError, TypeError, ValueError) as e:
258
+ # an ipinfo answer shaped differently again must not end the whole run;
259
+ # returning None lets set_ipinfo() fall back to the local geoip2 database
260
+ self.pglog("ipinfo: {} - unusable record ({}: {}), use geoip2".format(ip, type(e).__name__, e), self.LOGWRN)
261
+ return None
250
262
  return record
251
263
 
252
264
  def set_geoip2_database(self):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rda_python_metrics
3
- Version: 3.0.7
3
+ Version: 3.0.9
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