From f734d4ea8ecbd110b2b700a804e90b65eac76976 Mon Sep 17 00:00:00 2001 From: "Sean P. Singletary" Date: Thu, 25 May 2023 10:31:24 -0400 Subject: [PATCH 1/4] Added error handling when exporting tags with remote tag providers. --- .../axone_io/ignition/git/managers/GitTagManager.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/git-gateway/src/main/java/com/axone_io/ignition/git/managers/GitTagManager.java b/git-gateway/src/main/java/com/axone_io/ignition/git/managers/GitTagManager.java index 0b4b3d7b..dcc71793 100644 --- a/git-gateway/src/main/java/com/axone_io/ignition/git/managers/GitTagManager.java +++ b/git-gateway/src/main/java/com/axone_io/ignition/git/managers/GitTagManager.java @@ -8,6 +8,7 @@ import com.inductiveautomation.ignition.common.tags.config.TagConfigurationModel; import com.inductiveautomation.ignition.common.tags.model.TagPath; import com.inductiveautomation.ignition.common.tags.model.TagProvider; +import com.inductiveautomation.ignition.common.tags.model.TagProviderInformation; import com.inductiveautomation.ignition.common.tags.paths.BasicTagPath; import com.inductiveautomation.ignition.common.tags.paths.parser.TagPathParser; import com.inductiveautomation.ignition.common.util.LoggerEx; @@ -63,6 +64,16 @@ public static void exportTag(Path projectFolderPath) { Files.createDirectories(tagFolderPath); for (TagProvider tagProvider : context.getTagManager().getTagProviders()) { + try { + CompletableFuture cfProviderInfo = tagProvider.getStatusInformation(); + TagProviderInformation providerInfo = cfProviderInfo.get(); + if (!providerInfo.isAvailable()) { + continue; + } + } catch (Exception e) { + logger.error(e.toString(), e); + } + TagPath typesPath = TagPathParser.parse(""); List tagPaths = new ArrayList<>(); tagPaths.add(typesPath); From 154b97a803f634b78f8316bd41da5e90f83a90a1 Mon Sep 17 00:00:00 2001 From: "Sean P. Singletary" Date: Thu, 25 May 2023 20:32:36 -0400 Subject: [PATCH 2/4] Added error handling to getActor to prevent blocking when items are deleted. --- .../com/axone_io/ignition/git/managers/GitManager.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/git-gateway/src/main/java/com/axone_io/ignition/git/managers/GitManager.java b/git-gateway/src/main/java/com/axone_io/ignition/git/managers/GitManager.java index 2a869aa9..94ec429c 100644 --- a/git-gateway/src/main/java/com/axone_io/ignition/git/managers/GitManager.java +++ b/git-gateway/src/main/java/com/axone_io/ignition/git/managers/GitManager.java @@ -202,8 +202,14 @@ public static String getActor(String projectName, String path) { ProjectManager projectManager = context.getProjectManager(); RuntimeProject project = projectManager.getProject(projectName).get(); - ProjectResource projectResource = project.getResource(getResourcePath(path)).get(); - return LastModification.of(projectResource).map(LastModification::getActor).orElse("unknown"); + ResourcePath resourcePath = getResourcePath(path); + try { + ProjectResource projectResource = project.getResource(resourcePath).get(); + return LastModification.of(projectResource).map(LastModification::getActor).orElse("unknown"); + } catch (Exception e) { + logger.error(String.valueOf(e), e); + return "unknown"; + } } public static List getAddedFiles(String projectName) { From f0bbccb258c7de721e542b7107d09cceb52317bf Mon Sep 17 00:00:00 2001 From: "Sean P. Singletary" Date: Thu, 25 May 2023 20:36:15 -0400 Subject: [PATCH 3/4] Added error handling to getActor to prevent blocking when items are deleted. --- .../axone_io/ignition/git/managers/GitTagManager.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/git-gateway/src/main/java/com/axone_io/ignition/git/managers/GitTagManager.java b/git-gateway/src/main/java/com/axone_io/ignition/git/managers/GitTagManager.java index dcc71793..7cabca79 100644 --- a/git-gateway/src/main/java/com/axone_io/ignition/git/managers/GitTagManager.java +++ b/git-gateway/src/main/java/com/axone_io/ignition/git/managers/GitTagManager.java @@ -64,16 +64,6 @@ public static void exportTag(Path projectFolderPath) { Files.createDirectories(tagFolderPath); for (TagProvider tagProvider : context.getTagManager().getTagProviders()) { - try { - CompletableFuture cfProviderInfo = tagProvider.getStatusInformation(); - TagProviderInformation providerInfo = cfProviderInfo.get(); - if (!providerInfo.isAvailable()) { - continue; - } - } catch (Exception e) { - logger.error(e.toString(), e); - } - TagPath typesPath = TagPathParser.parse(""); List tagPaths = new ArrayList<>(); tagPaths.add(typesPath); From 5c9acc5718fdd3d67f2be006d6d8fdfa3e850e8c Mon Sep 17 00:00:00 2001 From: "Sean P. Singletary" Date: Wed, 2 Aug 2023 14:14:10 -0400 Subject: [PATCH 4/4] Additional error handling and logging for the tag export. --- .../ignition/git/managers/GitTagManager.java | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/git-gateway/src/main/java/com/axone_io/ignition/git/managers/GitTagManager.java b/git-gateway/src/main/java/com/axone_io/ignition/git/managers/GitTagManager.java index 7cabca79..6189c26f 100644 --- a/git-gateway/src/main/java/com/axone_io/ignition/git/managers/GitTagManager.java +++ b/git-gateway/src/main/java/com/axone_io/ignition/git/managers/GitTagManager.java @@ -64,20 +64,29 @@ public static void exportTag(Path projectFolderPath) { Files.createDirectories(tagFolderPath); for (TagProvider tagProvider : context.getTagManager().getTagProviders()) { - TagPath typesPath = TagPathParser.parse(""); - List tagPaths = new ArrayList<>(); - tagPaths.add(typesPath); - - CompletableFuture> cfTagModels = - tagProvider.getTagConfigsAsync(tagPaths, true, true); - List tModels = cfTagModels.get(); - - JsonObject json = TagUtilities.toJsonObject(tModels.get(0)); - JsonElement sortedJson = JsonUtilities.createDeterministicCopy(json); - - Path newFile = tagFolderPath.resolve(tagProvider.getName() + ".json"); + logger.info("Attempting to export tags for provider " + tagProvider.getName()); + try { + CompletableFuture cfProviderInfo = tagProvider.getStatusInformation(); + TagProviderInformation providerInfo = cfProviderInfo.get(); + if (providerInfo == null || !providerInfo.isAvailable()) { + logger.info("Tag provider unavailable. Skipping export for provider " + tagProvider.getName()); + continue; + } - Files.writeString(newFile, TAG_GSON.toJson(sortedJson)); + TagPath typesPath = TagPathParser.parse(""); + List tagPaths = new ArrayList<>(); + tagPaths.add(typesPath); + CompletableFuture> cfTagModels = + tagProvider.getTagConfigsAsync(tagPaths, true, true); + List tModels = cfTagModels.get(); + JsonObject json = TagUtilities.toJsonObject(tModels.get(0)); + JsonElement sortedJson = JsonUtilities.createDeterministicCopy(json); + Path newFile = tagFolderPath.resolve(tagProvider.getName() + ".json"); + Files.writeString(newFile, TAG_GSON.toJson(sortedJson)); + logger.info("Successfully exported tags for provider " + tagProvider.getName()); + } catch (Exception e) { + logger.error(e.toString(), e); + } } } catch (Exception e) { logger.error(e.toString(), e);