Fix load of JS Module extensions during installation or upgrade.

This commit is contained in:
Igor Kulikov 2024-12-27 15:32:17 +02:00
parent 8f406dad95
commit 94f294aebf
4 changed files with 12 additions and 9 deletions

View File

@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Service;
import org.thingsboard.server.common.data.ResourceSubType;
import org.thingsboard.server.common.data.ResourceType;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.msg.queue.ServiceType;
@ -74,7 +75,7 @@ public class DashboardSyncService {
List<RepoFile> resources = listFiles("resources");
for (RepoFile resourceFile : resources) {
byte[] data = getFileContent(resourceFile.path());
resourceService.createOrUpdateSystemResource(ResourceType.JS_MODULE, resourceFile.name(), data);
resourceService.createOrUpdateSystemResource(ResourceType.JS_MODULE, ResourceSubType.EXTENSION, resourceFile.name(), data);
}
List<RepoFile> images = listFiles("images");
for (RepoFile imageFile : images) {
@ -89,7 +90,7 @@ public class DashboardSyncService {
widgetsBundleService.updateSystemWidgets(widgetsBundles, widgetTypes);
RepoFile dashboardFile = listFiles("dashboards").get(0);
resourceService.createOrUpdateSystemResource(ResourceType.DASHBOARD, GATEWAYS_DASHBOARD_KEY, getFileContent(dashboardFile.path()));
resourceService.createOrUpdateSystemResource(ResourceType.DASHBOARD, null, GATEWAYS_DASHBOARD_KEY, getFileContent(dashboardFile.path()));
log.info("Gateways dashboard sync completed");
}

View File

@ -416,9 +416,9 @@ public class InstallScripts {
}
Path resourcesDir = Path.of(getDataDir(), RESOURCES_DIR);
loadSystemResources(resourcesDir.resolve("images"), ResourceType.IMAGE);
loadSystemResources(resourcesDir.resolve("js_modules"), ResourceType.JS_MODULE);
loadSystemResources(resourcesDir.resolve("dashboards"), ResourceType.DASHBOARD);
loadSystemResources(resourcesDir.resolve("images"), ResourceType.IMAGE, null);
loadSystemResources(resourcesDir.resolve("js_modules"), ResourceType.JS_MODULE, ResourceSubType.EXTENSION);
loadSystemResources(resourcesDir.resolve("dashboards"), ResourceType.DASHBOARD, null);
}
public void loadDashboards(TenantId tenantId, CustomerId customerId) {
@ -514,7 +514,7 @@ public class InstallScripts {
resourcesUpdater.updateWidgetsResources();
}
private void loadSystemResources(Path dir, ResourceType resourceType) {
private void loadSystemResources(Path dir, ResourceType resourceType, ResourceSubType resourceSubType) {
listDir(dir).forEach(resourceFile -> {
String resourceKey = resourceFile.getFileName().toString();
try {
@ -522,7 +522,7 @@ public class InstallScripts {
if (resourceType == ResourceType.IMAGE) {
imageService.createOrUpdateSystemImage(resourceKey, data);
} else {
resourceService.createOrUpdateSystemResource(resourceType, resourceKey, data);
resourceService.createOrUpdateSystemResource(resourceType, resourceSubType, resourceKey, data);
}
} catch (Exception e) {
throw new RuntimeException("Unable to load system resource " + resourceFile, e);

View File

@ -18,6 +18,7 @@ package org.thingsboard.server.dao.resource;
import com.google.common.util.concurrent.ListenableFuture;
import org.thingsboard.server.common.data.Dashboard;
import org.thingsboard.server.common.data.ResourceExportData;
import org.thingsboard.server.common.data.ResourceSubType;
import org.thingsboard.server.common.data.ResourceType;
import org.thingsboard.server.common.data.TbResource;
import org.thingsboard.server.common.data.TbResourceInfo;
@ -88,6 +89,6 @@ public interface ResourceService extends EntityDaoService {
Collection<TbResourceInfo> getUsedResources(TenantId tenantId, WidgetTypeDetails widgetTypeDetails);
TbResource createOrUpdateSystemResource(ResourceType resourceType, String resourceKey, byte[] data);
TbResource createOrUpdateSystemResource(ResourceType resourceType, ResourceSubType resourceSubType, String resourceKey, byte[] data);
}

View File

@ -597,7 +597,7 @@ public class BaseResourceService extends AbstractCachedEntityService<ResourceInf
}
@Override
public TbResource createOrUpdateSystemResource(ResourceType resourceType, String resourceKey, byte[] data) {
public TbResource createOrUpdateSystemResource(ResourceType resourceType, ResourceSubType resourceSubType, String resourceKey, byte[] data) {
if (resourceType == ResourceType.DASHBOARD) {
Dashboard dashboard = JacksonUtil.fromBytes(data, Dashboard.class);
dashboard.setTenantId(TenantId.SYS_TENANT_ID);
@ -615,6 +615,7 @@ public class BaseResourceService extends AbstractCachedEntityService<ResourceInf
resource = new TbResource();
resource.setTenantId(TenantId.SYS_TENANT_ID);
resource.setResourceType(resourceType);
resource.setResourceSubType(resourceSubType);
resource.setResourceKey(resourceKey);
resource.setFileName(resourceKey);
resource.setTitle(resourceKey);