Skip to content

Commit

Permalink
Fix report snapshot (#282)
Browse files Browse the repository at this point in the history
* feat: added reprocess data route, updated mongita (mongo on local)

* fix: added registrable bool on appbuiler to tell if app is registrable or not

* fix: recreate all reports
  • Loading branch information
alincmt authored Oct 7, 2022
1 parent 5a7f6d0 commit d4a946e
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 29 deletions.
6 changes: 5 additions & 1 deletion licenseware/history/step.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,11 @@ def save_file_content_validation(metadata, response):

file_content_validation = []
for cv in response["event_data"]:
file_content_validation.extend(cv["validation_response"]["validation"])
if "message" in cv["validation_response"]:
if cv["validation_response"]["message"] == "Monthly quota exceeded":
return
else:
file_content_validation.extend(cv["validation_response"]["validation"])

filepaths = []
for cv in response["event_data"]:
Expand Down
6 changes: 6 additions & 0 deletions licenseware/report_components/build_match_expression.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,12 @@ def build_match_expression(filter_payload: List[dict]) -> dict:

parsed_filter = {}
for filter_section in filter_payload:
if not isinstance(filter_section, dict):
continue
if sorted(["column", "filter_type", "filter_value"]) != sorted(
filter_section.keys()
):
continue
parsed_filter.update(
condition_switcher[filter_section["filter_type"]](
filter_section["column"], filter_section["filter_value"]
Expand Down
28 changes: 13 additions & 15 deletions licenseware/report_snapshot/generate_report_snapshots.py
Original file line number Diff line number Diff line change
@@ -1,31 +1,29 @@
from licenseware.report_snapshot import ReportSnapshot
from licenseware.utils.flask_request import get_flask_request
from licenseware.utils.logger import log


def generate_report_snaphosts(tenant_id: str, created_reports):
from licenseware.report_snapshot import ReportSnapshot

for report in created_reports:
log.info(f"Refreshing report: {report.report_id}...")
# Clear current snapshot versions
flask_request = get_flask_request(
headers={"Tenantid": tenant_id},
)
rs = ReportSnapshot(report, flask_request)
versions = rs.get_available_versions()
for version in versions["versions"]:
flask_request = get_flask_request(
headers={"Tenantid": tenant_id},
args={"version": version},
)
rs = ReportSnapshot(report, flask_request)
rs.delete_snapshot()

if versions:
for version in versions:
flask_request = get_flask_request(
headers={"Tenantid": tenant_id},
json=[{"version": version}],
)
rs = ReportSnapshot(report, flask_request)
rs.delete_snapshot()

# Generate a fresh snapshot
flask_request = get_flask_request(
headers={"Tenantid": tenant_id},
args={"version": version},
)
rs = ReportSnapshot(report, flask_request)
version = rs.generate_snapshot()
log.info(f"Report Snaphost created {version['version']}")
return version
versions = rs.generate_snapshot()
log.info(f"Report Snaphost created for report {report.report_id}{versions}")
39 changes: 26 additions & 13 deletions licenseware/report_snapshot/report_snapshot.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from licenseware.common.constants import envs
from licenseware.mongodata import collection
from licenseware.report_components.build_match_expression import build_match_expression
from licenseware.utils.flask_request import get_flask_request


def shortid(length=6):
Expand All @@ -33,7 +34,7 @@ def __init__(self, report: type, flask_request: Request):
self.tenant_id = flask_request.headers.get("Tenantid")
self.report_id = self.report.report_id
self.report_uuid = str(uuid.uuid4())
self.version = self.request.args.get("version", shortid())
self.version = self.request.args.get("version") or shortid()
self.snapshot_date = datetime.utcnow().isoformat()

def get_snapshot_version(self):
Expand All @@ -52,7 +53,8 @@ def get_available_versions(self):
pipeline, collection=envs.MONGO_COLLECTION_REPORT_SNAPSHOTS_NAME
)

return results[0] if len(results) == 1 else results
# [{'versions': ['DS4PZM']}]
return results[0]["versions"] if results else []

def get_snapshot_metadata(self):

Expand All @@ -73,17 +75,19 @@ def get_mongo_match_filters(self):
Create a mongo `$match` filter with tenant_id and filters sent from frontend
"""

if self.request.json is None:
received_filters = []
elif isinstance(self.request.json, dict):
received_filters = []
if isinstance(self.request.json, dict):
received_filters = [self.request.json]
elif isinstance(self.request.json, list):
received_filters = self.request.json
else:
raise Exception("Only list or objects are accepted")

parsed_filters = []
for filter in received_filters:
if isinstance(filter, dict) and sorted(
["column", "filter_type", "filter_value"]
) == sorted(filter.keys()):
parsed_filters.append(filter)

# Inserting filter by tenant_id
received_filters.insert(
parsed_filters.insert(
0,
{
"column": "tenant_id",
Expand All @@ -92,9 +96,9 @@ def get_mongo_match_filters(self):
},
)

filters = build_match_expression(received_filters)
filters = build_match_expression(parsed_filters)

return filters
return [filters]

def get_snapshot_component(self):

Expand Down Expand Up @@ -296,7 +300,16 @@ def update_report_component_metadata(self, comp):

def insert_component_data(self, comp, report_metadata):

component_data = comp.get_data(self.request)
flask_request = get_flask_request(
headers={
"Tenantid": self.request.headers.get("Tenantid"),
"TenantId": self.request.headers.get("Tenantid"),
"Authorization": self.request.headers.get("Authorization"),
},
json=self.get_mongo_match_filters(),
)

component_data = comp.get_data(flask_request)
component_pinned = {
"for_report_uuid": self.report_uuid,
"component_uuid": str(uuid.uuid4()),
Expand Down

0 comments on commit d4a946e

Please sign in to comment.