This is an automated email from the ASF dual-hosted git repository.

ofuks pushed a commit to branch DLAB-1571
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git


The following commit(s) were added to refs/heads/DLAB-1571 by this push:
     new a424388  Added custom image format
a424388 is described below

commit a4243886ca4bd458c93ddf1eef6cfef0885b7737
Author: Oleh Fuks <olegfuk...@gmail.com>
AuthorDate: Tue Mar 31 17:09:28 2020 +0300

    Added custom image format
---
 .../backendapi/service/impl/BillingServiceImpl.java    | 12 ++++++++++--
 .../com/epam/dlab/backendapi/util/BillingUtils.java    | 18 +++++++++++++++---
 2 files changed, 25 insertions(+), 5 deletions(-)

diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImpl.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImpl.java
index 22a4a13..0d77367 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImpl.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImpl.java
@@ -21,6 +21,7 @@ package com.epam.dlab.backendapi.service.impl;
 
 import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.conf.SelfServiceApplicationConfiguration;
+import com.epam.dlab.backendapi.dao.ImageExploratoryDao;
 import com.epam.dlab.backendapi.domain.BillingReport;
 import com.epam.dlab.backendapi.domain.BillingReportLine;
 import com.epam.dlab.backendapi.domain.EndpointDTO;
@@ -79,17 +80,19 @@ public class BillingServiceImpl implements BillingService {
     private final ExploratoryService exploratoryService;
     private final SelfServiceApplicationConfiguration configuration;
     private final RESTService provisioningService;
+    private final ImageExploratoryDao imageExploratoryDao;
     private final String sbn;
 
     @Inject
     public BillingServiceImpl(ProjectService projectService, EndpointService 
endpointService,
                               ExploratoryService exploratoryService, 
SelfServiceApplicationConfiguration configuration,
-                              @Named(ServiceConsts.PROVISIONING_SERVICE_NAME) 
RESTService provisioningService) {
+                              @Named(ServiceConsts.PROVISIONING_SERVICE_NAME) 
RESTService provisioningService, ImageExploratoryDao imageExploratoryDao) {
         this.projectService = projectService;
         this.endpointService = endpointService;
         this.exploratoryService = exploratoryService;
         this.configuration = configuration;
         this.provisioningService = provisioningService;
+        this.imageExploratoryDao = imageExploratoryDao;
         sbn = configuration.getServiceBaseName();
     }
 
@@ -151,6 +154,11 @@ public class BillingServiceImpl implements BillingService {
                 .stream()
                 .filter(userInstance -> 
Objects.nonNull(userInstance.getExploratoryId()))
                 .flatMap(ui -> BillingUtils.exploratoryBillingDataStream(ui, 
configuration.getMaxSparkInstanceCount(), sbn));
+        final Stream<BillingReportLine> billingReportLineStream = projects
+                .stream()
+                .map(p -> imageExploratoryDao.getImagesForProject(p.getName()))
+                .flatMap(Collection::stream)
+                .flatMap(i -> BillingUtils.customImageBillingDataStream(i, 
sbn));
 
         if (UserRoles.isAdmin(user)) {
             final Stream<BillingReportLine> billableEdges = projects
@@ -168,7 +176,7 @@ public class BillingServiceImpl implements BillingService {
                     .flatMap(s -> s);
         }
 
-        final Map<String, BillingReportLine> billableResources = 
Stream.of(billableUserInstances, billableAdminResources)
+        final Map<String, BillingReportLine> billableResources = 
Stream.of(billableUserInstances, billingReportLineStream, 
billableAdminResources)
                 .flatMap(s -> s)
                 .collect(Collectors.toMap(BillingReportLine::getDlabId, b -> 
b));
         log.debug("Billable resources are: {}", billableResources);
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/util/BillingUtils.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/util/BillingUtils.java
index 54489b2..4995de4 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/util/BillingUtils.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/util/BillingUtils.java
@@ -20,6 +20,7 @@
 package com.epam.dlab.backendapi.util;
 
 import com.epam.dlab.backendapi.domain.BillingReportLine;
+import com.epam.dlab.backendapi.resources.dto.ImageInfoRecord;
 import com.epam.dlab.dto.UserInstanceDTO;
 import com.epam.dlab.dto.UserInstanceStatus;
 import com.epam.dlab.dto.base.DataEngineType;
@@ -59,7 +60,9 @@ public class BillingUtils {
     private static final String VOLUME_PRIMARY_COMPUTATIONAL_FORMAT = 
"%s-%s-volume-primary";
     private static final String VOLUME_SECONDARY_FORMAT = 
"%s-volume-secondary";
     private static final String VOLUME_SECONDARY_COMPUTATIONAL_FORMAT = 
"%s-%s-volume-secondary";
-    private static final String IMAGE_STANDARD_FORMAT = 
"%s-%s-%s-%s-notebook-image";
+    private static final String IMAGE_STANDARD_FORMAT1 = 
"%s-%s-%s-%s-notebook-image";
+    private static final String IMAGE_STANDARD_FORMAT2 = 
"%s-%s-%s-notebook-image";
+    private static final String IMAGE_CUSTOM_FORMAT = "%s-%s-%s-%s-%s";
     private static final String IMAGE_NAME_PREFIX = "docker.dlab-";
 
     private static final String VOLUME_PRIMARY = "Volume primary";
@@ -114,17 +117,26 @@ public class BillingUtils {
                         getSlaveVolumes(userInstance, cr, 
maxSparkInstanceCount)
                 ));
         final String exploratoryId = userInstance.getExploratoryId();
-        final String imageId = String.format(IMAGE_STANDARD_FORMAT, sbn, 
userInstance.getProject(), userInstance.getEndpoint(), 
userInstance.getImageName().replace(IMAGE_NAME_PREFIX, ""));
+        final String imageId1 = String.format(IMAGE_STANDARD_FORMAT1, sbn, 
userInstance.getProject(), userInstance.getEndpoint(), 
userInstance.getImageName().replace(IMAGE_NAME_PREFIX, ""));
+        final String imageId2 = String.format(IMAGE_STANDARD_FORMAT2, sbn, 
userInstance.getEndpoint(), 
userInstance.getImageName().replace(IMAGE_NAME_PREFIX, ""));
         final String primaryVolumeId = String.format(VOLUME_PRIMARY_FORMAT, 
exploratoryId);
         final String secondaryVolumeId = 
String.format(VOLUME_SECONDARY_FORMAT, exploratoryId);
         final Stream<BillingReportLine> exploratoryStream = Stream.of(
                 
withUserProject(userInstance).resourceName(userInstance.getExploratoryName()).dlabId(exploratoryId).resourceType(EXPLORATORY).status(UserInstanceStatus.of(userInstance.getStatus())).shape(userInstance.getShape()).build(),
-                
withUserProject(userInstance).resourceName(IMAGE_NAME).dlabId(imageId).resourceType(IMAGE).build(),
+                
BillingReportLine.builder().resourceName(IMAGE_NAME).dlabId(imageId1).project(userInstance.getProject()).resourceType(IMAGE).build(),
+                
BillingReportLine.builder().resourceName(IMAGE_NAME).dlabId(imageId2).project(userInstance.getProject()).resourceType(IMAGE).build(),
                 
withUserProject(userInstance).resourceName(VOLUME_PRIMARY).dlabId(primaryVolumeId).resourceType(VOLUME).build(),
                 
withUserProject(userInstance).resourceName(VOLUME_SECONDARY).dlabId(secondaryVolumeId).resourceType(VOLUME).build());
         return Stream.concat(computationalStream, exploratoryStream);
     }
 
+    public static Stream<BillingReportLine> 
customImageBillingDataStream(ImageInfoRecord image, String sbn) {
+        String imageId = String.format(IMAGE_CUSTOM_FORMAT, sbn, 
image.getProject(), image.getEndpoint(), image.getApplication(), 
image.getName());
+        return Stream.of(
+                
BillingReportLine.builder().resourceName(IMAGE_NAME).project(image.getProject()).dlabId(imageId).resourceType(IMAGE).build()
+        );
+    }
+
     private static Stream<BillingReportLine> getSlaveVolumes(UserInstanceDTO 
userInstance, UserComputationalResource cr, Integer maxSparkInstanceCount) {
         List<BillingReportLine> list = new ArrayList<>();
         for (int i = 1; i <= maxSparkInstanceCount; i++) {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@dlab.apache.org
For additional commands, e-mail: commits-h...@dlab.apache.org

Reply via email to