Package: dynamodb-detech-ai
DynamoDB Package for detech.aiThis is detech.ai's package to access Dynamodb.Importsimportdetech_query_pkgfromdetech_query_pkgimportdynamodb_queriesasdb_queriesfromdetech_query_pkg.utilsimportdynamodb_utilsasdb_utils#Start DynamoDB Clientdb_utils.create_dynamodb_client(aws_access_key_id=AWS_ACCESS_KEY_ID,aws_secret_access_key=AWS_SECRET_ACCESS_KEY,region_name=REGION_NAME)Initialize Clientdefcreate_dynamodb_client(aws_access_key_id,aws_secret_access_key,region_name)Functionsdynamodbinsert_alertdefinsert_alert(alert_id,metric_id,org_id,app_id,team_id,assigned_to,start_time,end_time,alert_description,is_acknowledged,anomalies_dict,related_prev_anomalies,service_graph,significance_score,dynamodb)#Exampleinsert_alert(alert_id="256828",metric_id=123,org_id='org_id',app_id='app_id',team_id='team_id',assigned_to='Jorge',\start_time='2020-09-03 12:00:00',end_time='2020-09-03 12:20:00',alert_description='Spike in costs',\is_acknowledged='True',anomalies_dict={},related_prev_anomalies={},service_graph={},significance_score='34.3')get_alert_item_by_keydefget_alert_item_by_key(anom_id,dynamodb)update_alert_with_related_anomaliesdefupdate_alert_with_related_anomalies(alert_id,start_time,corr_anoms_dict,related_prev_anomalies,dynamodb)terminate_alertdefterminate_alert(alert_id,start_time,end_timestamp,dynamodb)create_metricdefcreate_metric(metric_id,date_bucket,metric_name,provider,namespace,agent,org_id,app_id,alignment,groupby,dimensions,data_points_list,dynamodb)#Examplecreate_metric(metric_id="test1",date_bucket="2020-10-02",metric_name="error_rate",provider="aws",namespace="dynamodb",agent="CloudWatch",org_id="test",app_id="app1",alignment="Sum",dimensions=[{"Name":"TableName","Value":"alerts.config"}],last=1535530432,data_points_list=[{'val':55,'time':1535530430},{'val':56,'time':1535530432}],dynamodb=dynamodb)batch_insert_metric_objectsdefbatch_insert_metric_objects(list_of_metric_objects,dynamodb)#Inserts list of metrics objects in batch into Dynamodbget_metric_detailsdefget_metric_details(metric_id,dynamodb)#Fetches all the details for a specific metric_idget_metric_item_by_keydefget_metric_item_by_key(metric_id,curr_date,dynamodb)scan_metrics_by_encrypted_iddefscan_metrics_by_encrypted_id(anom_alarm_id,dynamodb)query_alerts_configs_by_keydefquery_alerts_configs_by_key(metric_id,dynamodb)insert_alert_configdefinsert_alert_config(metric_id,alert_title,severity,alert_type,alert_direction,description,duration,duration_unit,rule_dict,recipients_list,owner_dict,dynamodb)#Exampleinsert_alert_config(metric_id="metric1245",alert_title="Anomaly by Cluster",severity="critical",alert_type="anomaly",alert_direction="spikes/drops",description="Relevant to Play Store billing user journey",duration=12,duration_unit="hours",rule_dict={},recipients_list=[{"channel":"webhook","contact":"j.velez2210@gmail.com"},{"channel":"slack","contact":"j.velez2210@gmail.com"}],owner_dict={"user_id":"user12341","user_name":"João Tótó",})query_most_recent_metric_fetching_logdefquery_most_recent_metric_fetching_log(component_id,dynamodb)#Fetches the log with the highest timestamp, from all the logs between start & end tsdynamodb_utilsput_itemdefput_item(item_dict,table_name,dynamodb)#Inserts json item into DynamoDB table#Exampleitem_dict={"attr":"value","attr2":"value2"}table_name="alerts"batch_insertdefbatch_insert(list_of_item_dicts,table_name,dynamodb)#Inserts a list of item_dicts in batch to dynamodbget_itemdefget_item(key_dict,table_name,dynamodb)#Retrieves item from DynamoDB table#Examplekey_dict={"prim_key"="value","sort_key"="value"}get_item_and_retrieve_specific_attributesdefget_item_and_retrieve_specific_attributes(key_dict,attr_list,table_name,dynamodb)#Retrieves item from DynamoDB table and retrieve specific attributes#Examplekey_dict={"prim_key":"value","sort_key":"value"}attr_list=['attr1','attr2']update_itemdefupdate_item(key_dict,update_expression,expression_attr_values,table_name,dynamodb)#Retrieves item from DynamoDB table#Examplekey_dict={"prim_key"="value","sort_key"="value"}update_expression="set service_graph=:i, metric_list=:l, significance_score=:s"expression_attr_values={':i':{'s1':['s2','s3']},':l':['124','123'],':s':Decimal(35.5)}#example to append to listUpdateExpression="SET some_attr = list_append(if_not_exists(some_attr, :empty_list), :i)",ExpressionAttributeValues={':i':[some_value],"empty_list":[]}update_item_conditionallydefupdate_item_conditionally(key_dict,condition_expression,update_expression,expression_attr_values,table_name,dynamodb)#Retrieves item from DynamoDB table#Examplekey_dict={"prim_key"="value","sort_key"="value"}update_expression="set service_graph=:i, metric_list=:l, significance_score=:s"expression_attr_values={':i':{'s1':['s2','s3']},':l':['124','123'],':s':Decimal(35.5)}condition_expression="significance_score <= :val"delete_item_conditionallydefdelete_item_conditionally(key_dict,condition_expression,expression_attr_values,table_name,dynamodb)#Examplecondition_expression="significance_score <= :val"expression_attr_values={":val":Decimal(50)}key_dict={'org_id':'Aptoide','start_time':'2020-09-03 12:00:00'}'''query_by_keydefquery_by_key(key_condition,table_name,dynamodb)#Queries from DynamoDB table by key condition#Examplekey_condition=Key('org_id').eq('Aptoide')query_and_project_by_key_conditiondefquery_and_project_by_key_condition(projection_expr,expr_attr_names,key_condition,table_name,dynamodb)#Queries from DynamoDB table by key condition and only returns some attrs#Examplekey_condition=Key('year').eq(year)&Key('title').between(title_range[0],title_range[1])projection_expr="#yr, title, info.genres, info.actors[0]"expr_attr_names={"#yr":"year"}scan_tabledefscan_table(scan_kwargs,table_name,dynamodb)#Scans entire table looking for items that match the filter expression#Examplescan_kwargs={'FilterExpression':Key('year').between(*year_range),'ProjectionExpression':"#yr, title, info.rating",'ExpressionAttributeNames':{"#yr":"year"}}query_by_key_min_maxdefquery_by_key_min_max(key_condition,table_name,is_min,dynamodb)#Queries from DynamoDB table by key condition#Examplekey_condition=Key('part_id').eq(partId)&Key('range_key').between(start,end)#orkey_condition=Key('part_id').eq(partId)get_all_items_in_tabledefget_all_items_in_table(table_name,dynamodb)