def delete_dataset(self, agent_instance_id, resource_id): res_obj = self.rr.read(resource_id) dpms = DataProductManagementServiceProcessClient(process=self) # Find data products from device id count_ds = 0 dp_objs, _ = self.rr.find_objects(resource_id, PRED.hasOutputProduct, RT.DataProduct, id_only=False) for dp_obj in dp_objs: if dpms.is_persisted(dp_obj._id): raise BadRequest("DataProduct %s '%s' is currently persisted", dp_obj._id, dp_obj.name) ds_objs, _ = self.rr.find_objects(dp_obj._id, PRED.hasDataset, RT.Dataset, id_only=False) for ds_obj in ds_objs: # Delete coverage cov_path = DatasetManagementService._get_coverage_path(ds_obj._id) if os.path.exists(cov_path): log.info("Removing coverage tree at %s", cov_path) shutil.rmtree(cov_path) else: raise OSError("Coverage path does not exist %s" % cov_path) # Delete Dataset and associations self.rr.delete(ds_obj._id) count_ds += 1 log.info("Datasets and coverages deleted for device %s '%s': %s", resource_id, res_obj.name, count_ds)
def delete_dataset(self, agent_instance_id, resource_id): """Deletes dataset and coverage files for all of a device's data products""" res_obj = self.rr.read(resource_id) dpms = DataProductManagementServiceProcessClient(process=self) # Find data products from device id count_ds = 0 dp_objs, _ = self.rr.find_objects(resource_id, PRED.hasOutputProduct, RT.DataProduct, id_only=False) for dp_obj in dp_objs: if dpms.is_persisted(dp_obj._id, headers=self._get_system_actor_headers()): if self.force: log.warn("DataProduct %s '%s' is currently persisted - continuing", dp_obj._id, dp_obj.name) else: raise BadRequest("DataProduct %s '%s' is currently persisted. Use force=True to ignore", dp_obj._id, dp_obj.name) ds_objs, _ = self.rr.find_objects(dp_obj._id, PRED.hasDataset, RT.Dataset, id_only=False) for ds_obj in ds_objs: # Delete coverage cov_path = DatasetManagementService._get_coverage_path(ds_obj._id) if os.path.exists(cov_path): log.info("Removing coverage tree at %s", cov_path) shutil.rmtree(cov_path) else: log.warn("Coverage path does not exist %s" % cov_path) # Delete Dataset and associations self.rr.delete(ds_obj._id) count_ds += 1 log.info("Datasets and coverages deleted for device %s '%s': %s", resource_id, res_obj.name, count_ds)
def delete_all_data(self, agent_instance_id, resource_id): # Delete Dataset and coverage for all original DataProducts self.delete_dataset(agent_instance_id, resource_id) res_obj = self.rr.read(resource_id) # Find parsed data product from device id dpms = DataProductManagementServiceProcessClient(process=self) count_dp, count_sd, count_st = 0, 0, 0 dp_objs, _ = self.rr.find_subjects(RT.DataProduct, PRED.hasSource, resource_id, id_only=False) for dp_obj in dp_objs: if dpms.is_persisted(dp_obj._id, headers=self._get_system_actor_headers()): if self.force: log.warn("DataProduct %s '%s' is currently persisted - continuing", dp_obj._id, dp_obj.name) else: raise BadRequest("DataProduct %s '%s' is currently persisted. Use force=True to ignore", dp_obj._id, dp_obj.name) # Find and delete Stream st_objs, _ = self.rr.find_objects(dp_obj._id, PRED.hasStream, RT.Stream, id_only=False) for st_obj in st_objs: self.rr.delete(st_obj._id) count_st += 1 # Find and delete StreamDefinition sd_objs, _ = self.rr.find_objects(dp_obj._id, PRED.hasStreamDefinition, RT.StreamDefinition, id_only=False) for sd_obj in sd_objs: self.rr.delete(sd_obj._id) count_sd += 1 # Delete DataProduct self.rr.delete(dp_obj._id) count_dp += 1 log.info("Data resources deleted for device %s '%s': %s DataProduct, %s StreamDefinition, %s Stream", resource_id, res_obj.name, count_dp, count_sd, count_st)
def activate_persistence(self, agent_instance_id, resource_id): dpms = DataProductManagementServiceProcessClient(process=self) dp_objs, _ = self.rr.find_objects(resource_id, PRED.hasOutputProduct, id_only=False) for dp in dp_objs: try: if dpms.is_persisted(dp._id, headers=self._get_system_actor_headers()): if self.force: log.warn("DataProduct %s '%s' is currently persisted - continuing", dp._id, dp.name) else: log.warn("DataProduct %s '%s' is currently persisted", dp._id, dp.name) continue log.info("Activating persistence for '%s'", dp.name) dpms.activate_data_product_persistence(dp._id, headers=self._get_system_actor_headers(), timeout=self.timeout) except Exception: self._log_error(agent_instance_id, resource_id, logexc=True, msg="Could not activate persistence for dp_id=%s" % (dp._id))