Load image resources separately
This commit is contained in:
parent
9e2e418cab
commit
cd146a9e74
File diff suppressed because one or more lines are too long
@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.thingsboard.server.common.data.ResourceType;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.common.msg.queue.ServiceType;
|
||||
import org.thingsboard.server.dao.resource.ImageService;
|
||||
import org.thingsboard.server.dao.resource.ResourceService;
|
||||
import org.thingsboard.server.dao.widget.WidgetsBundleService;
|
||||
import org.thingsboard.server.queue.discovery.PartitionService;
|
||||
@ -32,6 +33,7 @@ import org.thingsboard.server.service.sync.GitSyncService;
|
||||
import org.thingsboard.server.service.sync.vc.GitRepository.FileType;
|
||||
import org.thingsboard.server.service.sync.vc.GitRepository.RepoFile;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Stream;
|
||||
@ -45,6 +47,7 @@ public class DashboardSyncService {
|
||||
|
||||
private final GitSyncService gitSyncService;
|
||||
private final ResourceService resourceService;
|
||||
private final ImageService imageService;
|
||||
private final WidgetsBundleService widgetsBundleService;
|
||||
private final PartitionService partitionService;
|
||||
|
||||
@ -70,9 +73,14 @@ public class DashboardSyncService {
|
||||
|
||||
List<RepoFile> resources = listFiles("resources");
|
||||
for (RepoFile resourceFile : resources) {
|
||||
String data = getFileContent(resourceFile.path());
|
||||
byte[] data = getFileContent(resourceFile.path()).getBytes(StandardCharsets.UTF_8);
|
||||
resourceService.createOrUpdateSystemResource(ResourceType.JS_MODULE, resourceFile.name(), data);
|
||||
}
|
||||
List<RepoFile> images = listFiles("images");
|
||||
for (RepoFile imageFile : images) {
|
||||
byte[] data = getFileContent(imageFile.path()).getBytes(StandardCharsets.UTF_8);
|
||||
imageService.createOrUpdateSystemImage(imageFile.name(), data);
|
||||
}
|
||||
|
||||
Stream<String> widgetsBundles = listFiles("widget_bundles").stream()
|
||||
.map(widgetsBundleFile -> getFileContent(widgetsBundleFile.path()));
|
||||
@ -80,11 +88,8 @@ public class DashboardSyncService {
|
||||
.map(widgetTypeFile -> getFileContent(widgetTypeFile.path()));
|
||||
widgetsBundleService.updateSystemWidgets(widgetsBundles, widgetTypes);
|
||||
|
||||
// TODO: read images folder and save images
|
||||
|
||||
RepoFile dashboardFile = listFiles("dashboards").get(0);
|
||||
String dashboardJson = getFileContent(dashboardFile.path());
|
||||
resourceService.createOrUpdateSystemResource(ResourceType.DASHBOARD, GATEWAYS_DASHBOARD_KEY, dashboardJson);
|
||||
resourceService.createOrUpdateSystemResource(ResourceType.DASHBOARD, GATEWAYS_DASHBOARD_KEY, getFileContent(dashboardFile.path()).getBytes(StandardCharsets.UTF_8));
|
||||
|
||||
log.info("Gateways dashboard sync completed");
|
||||
}
|
||||
|
||||
@ -416,6 +416,8 @@ 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);
|
||||
}
|
||||
|
||||
@ -520,18 +522,21 @@ public class InstallScripts {
|
||||
listDir(dir).forEach(resourceFile -> {
|
||||
String resourceKey = resourceFile.getFileName().toString();
|
||||
try {
|
||||
String data = getContent(resourceFile);
|
||||
TbResource resource = resourceService.createOrUpdateSystemResource(resourceType, resourceKey, data);
|
||||
log.info("{} resource {}", (resource.getId() == null ? "Created" : "Updated"), resourceKey);
|
||||
byte[] data = getContent(resourceFile);
|
||||
if (resourceType == ResourceType.IMAGE) {
|
||||
imageService.createOrUpdateSystemImage(resourceKey, data);
|
||||
} else {
|
||||
resourceService.createOrUpdateSystemResource(resourceType, resourceKey, data);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Unable to load system resource " + resourceFile, e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private String getContent(Path file) {
|
||||
private byte[] getContent(Path file) {
|
||||
try {
|
||||
return Files.readString(file);
|
||||
return Files.readAllBytes(file);
|
||||
} catch (IOException e) {
|
||||
throw new UncheckedIOException(e);
|
||||
}
|
||||
|
||||
@ -76,4 +76,6 @@ public interface ImageService {
|
||||
|
||||
void inlineImagesForEdge(WidgetTypeDetails widgetTypeDetails);
|
||||
|
||||
TbResourceInfo createOrUpdateSystemImage(String resourceKey, byte[] data);
|
||||
|
||||
}
|
||||
|
||||
@ -88,6 +88,6 @@ public interface ResourceService extends EntityDaoService {
|
||||
|
||||
List<TbResourceInfo> getUsedResources(WidgetTypeDetails widgetTypeDetails);
|
||||
|
||||
TbResource createOrUpdateSystemResource(ResourceType resourceType, String resourceKey, String data);
|
||||
TbResource createOrUpdateSystemResource(ResourceType resourceType, String resourceKey, byte[] data);
|
||||
|
||||
}
|
||||
|
||||
@ -315,6 +315,30 @@ public class BaseImageService extends BaseResourceService implements ImageServic
|
||||
return result.success(success).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TbResourceInfo createOrUpdateSystemImage(String resourceKey, byte[] data) {
|
||||
TbResource image;
|
||||
TbResourceInfo existingImage = findResourceInfoByTenantIdAndKey(TenantId.SYS_TENANT_ID, ResourceType.IMAGE, resourceKey);
|
||||
if (existingImage != null) {
|
||||
image = new TbResource(existingImage);
|
||||
} else {
|
||||
image = new TbResource();
|
||||
image.setTenantId(TenantId.SYS_TENANT_ID);
|
||||
image.setFileName(resourceKey);
|
||||
image.setTitle(resourceKey);
|
||||
image.setResourceKey(resourceKey);
|
||||
image.setResourceType(ResourceType.IMAGE);
|
||||
image.setResourceSubType(ResourceSubType.IMAGE);
|
||||
}
|
||||
ImageDescriptor descriptor = new ImageDescriptor();
|
||||
descriptor.setMediaType(ImageUtils.fileExtensionToMediaType(StringUtils.substringAfterLast(resourceKey, ".")));
|
||||
image.setDescriptorValue(descriptor);
|
||||
image.setData(data);
|
||||
image.setPublic(true);
|
||||
log.debug("{} system image {}", (image.getId() == null ? "Creating" : "Updating"), resourceKey);
|
||||
return saveImage(image);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String calculateImageEtag(byte[] imageData) {
|
||||
return calculateEtag(imageData);
|
||||
|
||||
@ -546,9 +546,9 @@ public class BaseResourceService extends AbstractCachedEntityService<ResourceInf
|
||||
}
|
||||
|
||||
@Override
|
||||
public TbResource createOrUpdateSystemResource(ResourceType resourceType, String resourceKey, String data) {
|
||||
public TbResource createOrUpdateSystemResource(ResourceType resourceType, String resourceKey, byte[] data) {
|
||||
if (resourceType == ResourceType.DASHBOARD) {
|
||||
Dashboard dashboard = JacksonUtil.fromString(data, Dashboard.class);
|
||||
Dashboard dashboard = JacksonUtil.fromBytes(data, Dashboard.class);
|
||||
dashboard.setTenantId(TenantId.SYS_TENANT_ID);
|
||||
if (CollectionUtils.isNotEmpty(dashboard.getResources())) {
|
||||
importResources(dashboard.getTenantId(), dashboard.getResources());
|
||||
@ -556,7 +556,7 @@ public class BaseResourceService extends AbstractCachedEntityService<ResourceInf
|
||||
imageService.updateImagesUsage(dashboard);
|
||||
updateResourcesUsage(dashboard);
|
||||
|
||||
data = JacksonUtil.toString(dashboard);
|
||||
data = JacksonUtil.writeValueAsBytes(dashboard);
|
||||
}
|
||||
|
||||
TbResource resource = findResourceByTenantIdAndKey(TenantId.SYS_TENANT_ID, resourceType, resourceKey);
|
||||
@ -568,8 +568,8 @@ public class BaseResourceService extends AbstractCachedEntityService<ResourceInf
|
||||
resource.setFileName(resourceKey);
|
||||
resource.setTitle(resourceKey);
|
||||
}
|
||||
resource.setData(data.getBytes(StandardCharsets.UTF_8));
|
||||
log.debug("{} system resource {}", (resource.getId() == null ? "Creating" : "Updating"), resourceKey);
|
||||
resource.setData(data);
|
||||
log.info("{} system resource {}", (resource.getId() == null ? "Creating" : "Updating"), resourceKey);
|
||||
return saveResource(resource);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user