Skip to content

Commit

Permalink
add integration methods
Browse files Browse the repository at this point in the history
  • Loading branch information
SeaBlooms committed Nov 20, 2024
1 parent 061b6d8 commit fe01144
Show file tree
Hide file tree
Showing 3 changed files with 362 additions and 5 deletions.
21 changes: 17 additions & 4 deletions examples/examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,11 +114,11 @@
print("fetch_entity_raw_data()")
print(json.dumps(fetch_entity_raw_data_r, indent=1))

# create_integration_instance
create_integration_instance_r = j1.create_integration_instance(instance_name="pythonclient-customintegration",
# create_custom_integration_instance
create_custom_integration_instance_r = j1.create_custom_integration_instance(instance_name="pythonclient-customintegration",
instance_description="dev-testing")
print("create_integration_instance()")
print(create_integration_instance_r)
print("create_custom_integration_instance()")
print(create_custom_integration_instance_r)

integration_instance_id = "<GUID>"

Expand Down Expand Up @@ -447,4 +447,17 @@
print("fetch_downloaded_evaluation_results()")
print(json.dumps(r, indent=1))

# get_integration_definition_details
r = j1.get_integration_definition_details(integration_type="aws")
print("get_integration_definition_details()")
print(json.dumps(r, indent=1))

# fetch_integration_instances
r = j1.fetch_integration_instances(definition_id="<GUID>")
print("fetch_integration_instances()")
print(json.dumps(r, indent=1))

# get_integration_instance_details
r = j1.get_integration_instance_details(instance_id="<GUID>")
print("get_integration_instance_details()")
print(json.dumps(r, indent=1))
94 changes: 93 additions & 1 deletion jupiterone/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@
COMPLIANCE_FRAMEWORK_ITEM,
LIST_COLLECTION_RESULTS,
GET_RAW_DATA_DOWNLOAD_URL,
FIND_INTEGRATION_DEFINITION,
INTEGRATION_INSTANCES,
INTEGRATION_INSTANCE,
UPDATE_INTEGRATION_INSTANCE,
)


Expand Down Expand Up @@ -443,7 +447,10 @@ def delete_relationship(self, relationship_id: str = None):
response = self._execute_query(DELETE_RELATIONSHIP, variables=variables)
return response["data"]["deleteRelationship"]

def create_integration_instance(self, instance_name: str = None, instance_description: str = None, integration_definition_id: str = "8013680b-311a-4c2e-b53b-c8735fd97a5c"):
def create_custom_integration_instance(self,
instance_name: str = None,
instance_description: str = None,
integration_definition_id: str = "8013680b-311a-4c2e-b53b-c8735fd97a5c"):
"""Creates a new Custom Integration Instance.
args:
Expand Down Expand Up @@ -649,6 +656,91 @@ def fetch_integration_job_events(self, instance_id: str = None, instance_job_id:

return response['data']['integrationEvents']

def get_integration_definition_details(self, integration_type: str = None):
"""Fetch the Integration Definition Details for a given integration type.
"""
variables = {
"integrationType": integration_type,
"includeConfig": True
}

response = self._execute_query(FIND_INTEGRATION_DEFINITION, variables=variables)
return response

def fetch_integration_instances(self, definition_id: str = None):
"""Fetch all configured Instances for a given integration type.
"""
variables = {
"definitionId": definition_id,
"limit": 100
}

response = self._execute_query(INTEGRATION_INSTANCES, variables=variables)
return response

def get_integration_instance_details(self, instance_id: str = None):
"""Fetch configuration details for a single configured Integration Instance.
"""
variables = {
"integrationInstanceId": instance_id
}

response = self._execute_query(INTEGRATION_INSTANCE, variables=variables)
return response

def update_integration_instance_config_value(self,
instance_id: str = None,
config_key: str = None,
config_value: str = None):
"""Update a single config k:v pair existing on a configured Integration Instance.
"""

# fetch existing instnace configuration
instance_config = self.get_integration_instance_details(instance_id=instance_id)
config_dict = instance_config['data']['integrationInstance']['config']

if str(config_dict.get(config_key, "Not Found")) != "Not Found":

# update config key value with new provided value
config_dict[config_key] = config_value
instance_config['data']['integrationInstance']['config'] = config_dict

# remove externalId to not include in update payload
del instance_config['data']['integrationInstance']['config']['externalId']

# prepare variables GraphQL payload for updating config
instance_details = instance_config['data']['integrationInstance']

variables = {
"id": instance_details['id'],
"update": {
"pollingInterval": instance_details['pollingInterval'],
"config": instance_details['config'],
"description": instance_details['description'],
"name": instance_details['name'],
"collectorPoolId": instance_details['collectorPoolId'],
"pollingIntervalCronExpression": instance_details['pollingIntervalCronExpression'],
"ingestionSourcesOverrides": instance_details['ingestionSourcesOverrides']
}
}

# remove problem fields from previous response
del variables['update']['pollingIntervalCronExpression']['__typename']

for ingestion_source in instance_details['ingestionSourcesOverrides']:
ingestion_source.pop("__typename", None) # Removes key if it exists, ignores if not

response = self._execute_query(UPDATE_INTEGRATION_INSTANCE, variables=variables)

return response

else:
return "Provided 'config_key' not found in existing Integration Instance config"

def create_smartclass(self, smartclass_name: str = None, smartclass_description: str = None):
"""Creates a new Smart Class within Assets.
Expand Down
Loading

0 comments on commit fe01144

Please sign in to comment.