Mirror of https://github.com/roostorg/coop github.com/roostorg/coop
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 557ff54b2b435e5f1e789c6a8a4e1bebf2d7deb6 72 lines 2.9 kB view raw
1import _ from 'lodash'; 2import { type ReadonlyDeep } from 'type-fest'; 3 4import { type Dependencies } from '../../iocContainer/index.js'; 5import { inject } from '../../iocContainer/utils.js'; 6import { type ConditionSetWithResult } from '../../models/rules/RuleModel.js'; 7import { type RuleEnvironment } from '../../rule_engine/RuleEngine.js'; 8import { type ItemSubmission } from '../../services/itemProcessingService/index.js'; 9import { type ReportingRuleExecutionCorrelationId } from '../../services/reportingService/index.js'; 10import { fromCorrelationId } from '../../utils/correlationIds.js'; 11import { jsonStringify } from '../../utils/encoding.js'; 12import { getUtcDateOnlyString } from '../../utils/time.js'; 13import { pickConditionPropsToLog } from './ruleExecutionLoggingUtils.js'; 14 15type ReportingRuleExecutionData = { 16 orgId: string; 17 reportingRule: ReadonlyDeep<{ 18 id: string; 19 name: string; 20 version: string; 21 environment: RuleEnvironment; 22 }>; 23 ruleInput: ItemSubmission; 24 result: ReadonlyDeep<ConditionSetWithResult>; 25 passed: boolean; 26 correlationId: ReportingRuleExecutionCorrelationId; 27 policyNames: readonly string[]; 28 policyIds: readonly string[]; 29}; 30 31class ReportingRuleExecutionLogger { 32 constructor( 33 private readonly analytics: Dependencies['DataWarehouseAnalytics'], 34 ) {} 35 async logReportingRuleExecutions( 36 executions: readonly ReportingRuleExecutionData[], 37 ) { 38 const now = new Date(); 39 await this.analytics.bulkWrite( 40 'REPORTING_SERVICE.REPORTING_RULE_EXECUTIONS' as any, 41 executions.map((data) => ({ 42 ds: getUtcDateOnlyString(now), 43 ts: now.valueOf(), 44 org_id: data.orgId, 45 item_id: data.ruleInput.itemId, 46 item_type_id: data.ruleInput.itemType.id, 47 item_type_kind: data.ruleInput.itemType.kind, 48 item_submission_id: data.ruleInput.submissionId, 49 item_data: jsonStringify(data.ruleInput.data), 50 item_type_name: data.ruleInput.itemType.name, 51 item_creator_id: data.ruleInput.creator?.id, 52 item_creator_type_id: data.ruleInput.creator?.typeId, 53 item_type_schema: jsonStringify(data.ruleInput.itemType.schema), 54 item_type_schema_field_roles: data.ruleInput.itemType.schemaFieldRoles, 55 item_type_schema_variant: data.ruleInput.itemType.schemaVariant, 56 item_type_version: data.ruleInput.itemType.version, 57 policy_names: data.policyNames, 58 policy_ids: data.policyIds, 59 rule_name: data.reportingRule.name, 60 rule_id: data.reportingRule.id, 61 rule_version: data.reportingRule.version, 62 rule_environment: data.reportingRule.environment, 63 correlation_id: fromCorrelationId(data.correlationId), 64 result: pickConditionPropsToLog(data.result), 65 passed: data.passed, 66 })), 67 ); 68 } 69} 70 71export default inject(['DataWarehouseAnalytics'], ReportingRuleExecutionLogger); 72export { type ReportingRuleExecutionLogger };