1313import uuid
1414from hashlib import md5 , sha1
1515
16- from cassandra import ConsistencyLevel
17- from cassandra .auth import PlainTextAuthProvider
18- from cassandra .cluster import Cluster
1916from cassandra .query import SimpleStatement
17+ from cassandra .cqlengine .query import BatchQuery
2018
2119from errortracker import cassandra_schema
2220from errortracker .cassandra import cassandra_session
2725_cassandra_session = None
2826
2927
30- def insert (config , oopsid , oops_json , user_token = None , fields = None , proposed_pkg = False ):
28+ def prune ():
29+ """Remove OOPSES that are over 30 days old."""
30+ # Find days to prune
31+ days = set ()
32+ prune_to = time .strftime ("%Y%m%d" , time .gmtime (time .time () - MONTH ))
33+ for dayoops in cassandra_schema .DayOOPS .objects .distinct (["key" ]):
34+ key = dayoops .key .decode ()
35+ if key < prune_to :
36+ days .add (key )
37+ if not days :
38+ return
39+ # collect all the oopses (buffers all in memory; may want to make
40+ # incremental in future)
41+ for day in days :
42+ oops_ids = list (
43+ set (
44+ dayoops .value
45+ for dayoops in cassandra_schema .DayOOPS .filter (key = day .encode ()).only (["value" ])
46+ )
47+ )
48+ with BatchQuery () as b :
49+ cassandra_schema .DayOOPS .objects .batch (b ).filter (key = day .encode ()).delete ()
50+ for id in oops_ids :
51+ cassandra_schema .OOPS .objects .batch (b ).filter (key = id ).delete ()
52+
53+
54+ def insert (oopsid , oops_json , user_token = None , fields = None , proposed_pkg = False ) -> str :
3155 """Insert an OOPS into the system.
3256
3357 :return: The day which the oops was filed under.
@@ -39,8 +63,8 @@ def insert(config, oopsid, oops_json, user_token=None, fields=None, proposed_pkg
3963 assert isinstance (oops_dict , dict )
4064 insert_dict = {}
4165 for key , value in list (oops_dict .items ()):
42- insert_dict [key ] = json . dumps (value )
43- return _insert (config , oopsid , insert_dict , user_token , fields , proposed_pkg )
66+ insert_dict [key ] = str (value )
67+ return _insert (oopsid , insert_dict , user_token , fields , proposed_pkg )
4468
4569
4670def insert_dict (
@@ -50,7 +74,7 @@ def insert_dict(
5074 fields = None ,
5175 proposed_pkg = False ,
5276 ttl = None ,
53- ):
77+ ) -> str :
5478 """Insert an OOPS into the system.
5579
5680 :return: The day which the oops was filed under.
@@ -66,7 +90,7 @@ def _insert(
6690 fields = None ,
6791 proposed_pkg = False ,
6892 ttl = None ,
69- ):
93+ ) -> str :
7094 """Internal function. Do not call this directly.
7195
7296 :param oopsid: The identifier for this OOPS.
@@ -91,7 +115,7 @@ def _insert(
91115 cassandra_schema .OOPS .create (key = oopsid .encode (), column1 = key , value = value ).ttl (ttl )
92116
93117 automated_testing = False
94- if user_token .startswith ("deadbeef" ):
118+ if user_token and user_token .startswith ("deadbeef" ):
95119 automated_testing = True
96120
97121 cassandra_schema .DayOOPS .create (key = day_key .encode (), column1 = now_uuid , value = oopsid .encode ())
0 commit comments