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

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


The following commit(s) were added to refs/heads/inactivity_integration by this 
push:
     new 47979d7  DLAB-527 fixed bug connected with azure billing
47979d7 is described below

commit 47979d7ff473326c179b3e126be8871860e15716
Author: bhliva <[email protected]>
AuthorDate: Wed Mar 13 17:35:13 2019 +0200

    DLAB-527 fixed bug connected with azure billing
---
 .../azure/AzureBillableResourcesService.java       | 492 ++++++++++-----------
 1 file changed, 246 insertions(+), 246 deletions(-)

diff --git 
a/services/billing-azure/src/main/java/com/epam/dlab/billing/azure/AzureBillableResourcesService.java
 
b/services/billing-azure/src/main/java/com/epam/dlab/billing/azure/AzureBillableResourcesService.java
index 1630ac7..b6d88fd 100644
--- 
a/services/billing-azure/src/main/java/com/epam/dlab/billing/azure/AzureBillableResourcesService.java
+++ 
b/services/billing-azure/src/main/java/com/epam/dlab/billing/azure/AzureBillableResourcesService.java
@@ -43,250 +43,250 @@ import static com.mongodb.client.model.Projections.fields;
  */
 @Slf4j
 public class AzureBillableResourcesService {
-       private static final String[] USER_INSTANCES_EXCLUDED_FIELDS = 
{"scheduler_data", "computational_resources" +
-                       ".scheduler_data"};
-       private final ObjectMapper objectMapper = new ObjectMapper();
-
-       private MongoDbBillingClient mongoDbBillingClient;
-       private String serviceBaseName;
-       private String sharedStorageAccountTagName;
-       private String ssnStorageAccountTagName;
-       private String azureDataLakeTagName;
-
-       /**
-        * Constructs the service class
-        *
-        * @param mongoDbBillingClient mongodb client to retrieve all billable 
resources
-        */
-       public AzureBillableResourcesService(MongoDbBillingClient 
mongoDbBillingClient) {
-               this.mongoDbBillingClient = mongoDbBillingClient;
-
-               this.serviceBaseName = 
getConfigurationSettingValue(MongoKeyWords.SERVICE_BASE_NAME_KEY)
-                               .replace('_', '-').toLowerCase();
-
-               this.sharedStorageAccountTagName = 
getConfigurationSettingValue(MongoKeyWords.SHARED_STORAGE_ACCOUNT_TAG_KEY);
-               this.ssnStorageAccountTagName = 
getConfigurationSettingValue(MongoKeyWords.SSN_STORAGE_ACCOUNT_TAG_KEY);
-               this.azureDataLakeTagName = 
getConfigurationSettingValueOrEmpty(MongoKeyWords.DATA_LAKE_TAG_NAME);
-
-       }
-
-
-       /**
-        * Collects billable resources
-        *
-        * @return set of all billable resources that were created in scope by 
DLab from its installation to current time
-        */
-       public Set<AzureDlabBillableResource> getBillableResources() {
-
-               Set<AzureDlabBillableResource> billableResources = new 
HashSet<>();
-
-               billableResources.addAll(getSsn());
-               billableResources.addAll(getDataLake());
-               billableResources.addAll(getEdgeAndStorageAccount());
-               billableResources.addAll(getNotebooksAndClusters());
-
-               List<AzureDlabBillableResource> list = new 
ArrayList<>(billableResources);
-               
list.sort(Comparator.comparing(AzureDlabBillableResource::getId));
-
-               try {
-                       log.debug("Billable resources is \n {}", 
objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString
-                                       (list));
-               } catch (JsonProcessingException e) {
-                       log.debug("Error during pretty printing. Show simple 
list", e);
-                       log.debug("Billable resources is {}", list);
-               }
-
-               return billableResources;
-       }
-
-       private String getConfigurationSettingValue(String key) {
-
-               Document document = 
mongoDbBillingClient.getDatabase().getCollection(MongoKeyWords.SETTINGS_COLLECTION)
-                               .find(Filters.eq(MongoKeyWords.MONGO_ID, 
key)).first();
-
-               if (document != null) {
-                       String value = document.getString("value");
-                       if (StringUtils.isEmpty(value)) {
-                               throw new IllegalStateException("Configuration 
" + key + " does not have value in settings");
-                       }
-                       log.info("Key {} has value {}", key, value);
-                       return value;
-               } else {
-                       throw new IllegalStateException("Configuration " + key 
+ " is not present in settings");
-               }
-
-       }
-
-       private String getConfigurationSettingValueOrEmpty(String key) {
-               try {
-                       return getConfigurationSettingValue(key);
-               } catch (IllegalStateException e) {
-                       log.warn("key {} is not found", key, e);
-                       return null;
-               }
-       }
-
-       private Set<AzureDlabBillableResource> getSsn() {
-
-               return Sets.newHashSet(
-                               
AzureDlabBillableResource.builder().id(serviceBaseName + 
"-ssn").type(DlabResourceType.SSN).build(),
-                               
AzureDlabBillableResource.builder().id(ssnStorageAccountTagName).type(DlabResourceType
-                                               .SSN_STORAGE_ACCOUNT).build(),
-                               
AzureDlabBillableResource.builder().id(sharedStorageAccountTagName).type(DlabResourceType
-                                               
.COLLABORATION_STORAGE_ACCOUNT).build(),
-                               
AzureDlabBillableResource.builder().id(serviceBaseName + "-ssn-volume-primary")
-                                               
.type(DlabResourceType.VOLUME).build()
-               );
-       }
-
-       private Set<AzureDlabBillableResource> getDataLake() {
-
-               if (azureDataLakeTagName != null) {
-                       return 
Sets.newHashSet(AzureDlabBillableResource.builder().id(azureDataLakeTagName)
-                                       
.type(DlabResourceType.DATA_LAKE_STORE).build());
-               }
-
-               return Sets.newHashSet();
-       }
-
-       private Set<AzureDlabBillableResource> getEdgeAndStorageAccount() {
-               Set<AzureDlabBillableResource> billableResources = new 
HashSet<>();
-
-               try {
-
-                       List<EdgeInfoAzure> edgeInfoList = 
objectMapper.readValue(
-                                       
objectMapper.writeValueAsString(mongoDbBillingClient.getDatabase()
-                                                       
.getCollection(MongoKeyWords.EDGE_COLLECTION).find()),
-                                       new 
com.fasterxml.jackson.core.type.TypeReference<List<EdgeInfoAzure>>() {
-                                       });
-
-                       if (edgeInfoList != null && !edgeInfoList.isEmpty()) {
-                               for (EdgeInfoAzure edgeInfoAzure : 
edgeInfoList) {
-                                       
billableResources.addAll(getEdgeAndStorageAccount(edgeInfoAzure));
-                               }
-                       }
-
-                       return billableResources;
-               } catch (IOException e) {
-                       log.error("Error during preparation of billable 
resources", e);
-               }
-               return billableResources;
-       }
-
-       private Set<AzureDlabBillableResource> 
getEdgeAndStorageAccount(EdgeInfoAzure edgeInfoAzure) {
-
-               Set<AzureDlabBillableResource> billableResources = new 
HashSet<>();
-
-               if 
(StringUtils.isNotEmpty(edgeInfoAzure.getUserContainerName())) {
-                       
billableResources.add(AzureDlabBillableResource.builder()
-                                       
.id(edgeInfoAzure.getUserStorageAccountTagName())
-                                       
.type(DlabResourceType.EDGE_STORAGE_ACCOUNT)
-                                       .user(edgeInfoAzure.getId()).build());
-               }
-
-               if (StringUtils.isNotEmpty(edgeInfoAzure.getInstanceId())) {
-                       
billableResources.add(AzureDlabBillableResource.builder()
-                                       .id(edgeInfoAzure.getInstanceId())
-                                       .type(DlabResourceType.EDGE)
-                                       .user(edgeInfoAzure.getId()).build());
-
-                       
billableResources.add(AzureDlabBillableResource.builder()
-                                       .id(serviceBaseName + "-" + 
edgeUserSimpleName(edgeInfoAzure) + "-edge-volume-primary")
-                                       .type(DlabResourceType.VOLUME)
-                                       .user(edgeInfoAzure.getId()).build());
-               }
-
-               return billableResources;
-       }
-
-       private String edgeUserSimpleName(EdgeInfoAzure edgeInfoAzure) {
-               return edgeInfoAzure.getId().replaceAll("@.*", "");
-       }
-
-       private Set<AzureDlabBillableResource> getNotebooksAndClusters() {
-
-               Set<AzureDlabBillableResource> billableResources = new 
HashSet<>();
-
-               try {
-                       final FindIterable<Document> userInstanceDocuments = 
mongoDbBillingClient.getDatabase()
-                                       
.getCollection(MongoKeyWords.NOTEBOOK_COLLECTION)
-                                       .find()
-                                       
.projection(fields(exclude(USER_INSTANCES_EXCLUDED_FIELDS)));
-                       List<UserInstanceDTO> userInstanceDTOS = 
objectMapper.readValue(
-                                       
objectMapper.writeValueAsString(userInstanceDocuments),
-                                       new 
com.fasterxml.jackson.core.type.TypeReference<List<UserInstanceDTO>>() {
-                                       });
-
-                       if (userInstanceDTOS != null && 
!userInstanceDTOS.isEmpty()) {
-                               userInstanceDTOS.forEach(e -> 
billableResources.addAll(getNotebookAndClusters(e)));
-                       }
-
-               } catch (IOException e) {
-                       log.error("Error during preparation of billable 
resources", e);
-               }
-
-               return billableResources;
-       }
-
-       private Set<AzureDlabBillableResource> 
getNotebookAndClusters(UserInstanceDTO userInstanceDTO) {
-               Set<AzureDlabBillableResource> notebookResources = new 
HashSet<>();
-
-               if (StringUtils.isNotEmpty(userInstanceDTO.getExploratoryId())) 
{
-                       
notebookResources.add(AzureDlabBillableResource.builder()
-                                       .id(userInstanceDTO.getExploratoryId())
-                                       .type(DlabResourceType.EXPLORATORY)
-                                       .user(userInstanceDTO.getUser())
-                                       
.notebookId(userInstanceDTO.getExploratoryId())
-                                       
.resourceName(userInstanceDTO.getExploratoryName()).build());
-                       notebookResources.addAll(getVolumes(userInstanceDTO, 
userInstanceDTO.getExploratoryId(), "Volume primary",
-                                       "Volume secondary"));
-
-                       if (userInstanceDTO.getResources() != null && 
!userInstanceDTO.getResources().isEmpty()) {
-                               for (UserComputationalResource 
userComputationalResource : userInstanceDTO.getResources()) {
-                                       if 
(StringUtils.isNotEmpty(userComputationalResource.getComputationalId())) {
-
-                                               
notebookResources.add(AzureDlabBillableResource.builder()
-                                                               
.id(userComputationalResource.getComputationalId())
-                                                               
.type(DlabResourceType.COMPUTATIONAL)
-                                                               
.user(userInstanceDTO.getUser())
-                                                               
.notebookId(userInstanceDTO.getExploratoryId())
-                                                               
.resourceName(userComputationalResource.getComputationalName()).build());
-                                               final 
List<AzureDlabBillableResource> volumes = getVolumes(userInstanceDTO,
-                                                               
userComputationalResource.getComputationalId(),
-                                                               
userComputationalResource.getComputationalName() + " volume primary",
-                                                               
userComputationalResource.getComputationalName() + " volume secondary");
-                                               
notebookResources.addAll(volumes);
-
-                                       } else {
-                                               log.error("Computational with 
empty id {} is found in notebook {}. Skip it.",
-                                                               
userComputationalResource, userInstanceDTO);
-                                       }
-                               }
-                       }
-
-               } else {
-                       log.error("Notebook {} with empty id id found. Skip 
it.", userInstanceDTO);
-               }
-
-               return notebookResources;
-       }
-
-       private List<AzureDlabBillableResource> getVolumes(UserInstanceDTO 
userInstanceDTO, String exploratoryId, String
-                       primaryVolumeName, String secondaryVolumeName) {
-
-               return Arrays.asList(
-                               AzureDlabBillableResource.builder()
-                                               .id(exploratoryId + 
"-volume-primary")
-                                               .type(DlabResourceType.VOLUME)
-                                               .user(userInstanceDTO.getUser())
-                                               
.notebookId(userInstanceDTO.getExploratoryId())
-                                               
.resourceName(primaryVolumeName).build(),
-                               AzureDlabBillableResource.builder()
-                                               .id(exploratoryId + 
"-volume-secondary")
-                                               .type(DlabResourceType.VOLUME)
-                                               .user(userInstanceDTO.getUser())
-                                               
.notebookId(userInstanceDTO.getExploratoryId())
-                                               
.resourceName(secondaryVolumeName).build()
-               );
-       }
+    private static final String[] USER_INSTANCES_EXCLUDED_FIELDS = 
{"scheduler_data", "last_activity",
+            "computational_resources.scheduler_data", 
"computational_resources.last_activity"};
+    private final ObjectMapper objectMapper = new ObjectMapper();
+
+    private MongoDbBillingClient mongoDbBillingClient;
+    private String serviceBaseName;
+    private String sharedStorageAccountTagName;
+    private String ssnStorageAccountTagName;
+    private String azureDataLakeTagName;
+
+    /**
+     * Constructs the service class
+     *
+     * @param mongoDbBillingClient mongodb client to retrieve all billable 
resources
+     */
+    public AzureBillableResourcesService(MongoDbBillingClient 
mongoDbBillingClient) {
+        this.mongoDbBillingClient = mongoDbBillingClient;
+
+        this.serviceBaseName = 
getConfigurationSettingValue(MongoKeyWords.SERVICE_BASE_NAME_KEY)
+                .replace('_', '-').toLowerCase();
+
+        this.sharedStorageAccountTagName = 
getConfigurationSettingValue(MongoKeyWords.SHARED_STORAGE_ACCOUNT_TAG_KEY);
+        this.ssnStorageAccountTagName = 
getConfigurationSettingValue(MongoKeyWords.SSN_STORAGE_ACCOUNT_TAG_KEY);
+        this.azureDataLakeTagName = 
getConfigurationSettingValueOrEmpty(MongoKeyWords.DATA_LAKE_TAG_NAME);
+
+    }
+
+
+    /**
+     * Collects billable resources
+     *
+     * @return set of all billable resources that were created in scope by 
DLab from its installation to current time
+     */
+    public Set<AzureDlabBillableResource> getBillableResources() {
+
+        Set<AzureDlabBillableResource> billableResources = new HashSet<>();
+
+        billableResources.addAll(getSsn());
+        billableResources.addAll(getDataLake());
+        billableResources.addAll(getEdgeAndStorageAccount());
+        billableResources.addAll(getNotebooksAndClusters());
+
+        List<AzureDlabBillableResource> list = new 
ArrayList<>(billableResources);
+        list.sort(Comparator.comparing(AzureDlabBillableResource::getId));
+
+        try {
+            log.debug("Billable resources is \n {}", 
objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString
+                    (list));
+        } catch (JsonProcessingException e) {
+            log.debug("Error during pretty printing. Show simple list", e);
+            log.debug("Billable resources is {}", list);
+        }
+
+        return billableResources;
+    }
+
+    private String getConfigurationSettingValue(String key) {
+
+        Document document = 
mongoDbBillingClient.getDatabase().getCollection(MongoKeyWords.SETTINGS_COLLECTION)
+                .find(Filters.eq(MongoKeyWords.MONGO_ID, key)).first();
+
+        if (document != null) {
+            String value = document.getString("value");
+            if (StringUtils.isEmpty(value)) {
+                throw new IllegalStateException("Configuration " + key + " 
does not have value in settings");
+            }
+            log.info("Key {} has value {}", key, value);
+            return value;
+        } else {
+            throw new IllegalStateException("Configuration " + key + " is not 
present in settings");
+        }
+
+    }
+
+    private String getConfigurationSettingValueOrEmpty(String key) {
+        try {
+            return getConfigurationSettingValue(key);
+        } catch (IllegalStateException e) {
+            log.warn("key {} is not found", key, e);
+            return null;
+        }
+    }
+
+    private Set<AzureDlabBillableResource> getSsn() {
+
+        return Sets.newHashSet(
+                AzureDlabBillableResource.builder().id(serviceBaseName + 
"-ssn").type(DlabResourceType.SSN).build(),
+                
AzureDlabBillableResource.builder().id(ssnStorageAccountTagName).type(DlabResourceType
+                        .SSN_STORAGE_ACCOUNT).build(),
+                
AzureDlabBillableResource.builder().id(sharedStorageAccountTagName).type(DlabResourceType
+                        .COLLABORATION_STORAGE_ACCOUNT).build(),
+                AzureDlabBillableResource.builder().id(serviceBaseName + 
"-ssn-volume-primary")
+                        .type(DlabResourceType.VOLUME).build()
+        );
+    }
+
+    private Set<AzureDlabBillableResource> getDataLake() {
+
+        if (azureDataLakeTagName != null) {
+            return 
Sets.newHashSet(AzureDlabBillableResource.builder().id(azureDataLakeTagName)
+                    .type(DlabResourceType.DATA_LAKE_STORE).build());
+        }
+
+        return Sets.newHashSet();
+    }
+
+    private Set<AzureDlabBillableResource> getEdgeAndStorageAccount() {
+        Set<AzureDlabBillableResource> billableResources = new HashSet<>();
+
+        try {
+
+            List<EdgeInfoAzure> edgeInfoList = objectMapper.readValue(
+                    
objectMapper.writeValueAsString(mongoDbBillingClient.getDatabase()
+                            
.getCollection(MongoKeyWords.EDGE_COLLECTION).find()),
+                    new 
com.fasterxml.jackson.core.type.TypeReference<List<EdgeInfoAzure>>() {
+                    });
+
+            if (edgeInfoList != null && !edgeInfoList.isEmpty()) {
+                for (EdgeInfoAzure edgeInfoAzure : edgeInfoList) {
+                    
billableResources.addAll(getEdgeAndStorageAccount(edgeInfoAzure));
+                }
+            }
+
+            return billableResources;
+        } catch (IOException e) {
+            log.error("Error during preparation of billable resources", e);
+        }
+        return billableResources;
+    }
+
+    private Set<AzureDlabBillableResource> 
getEdgeAndStorageAccount(EdgeInfoAzure edgeInfoAzure) {
+
+        Set<AzureDlabBillableResource> billableResources = new HashSet<>();
+
+        if (StringUtils.isNotEmpty(edgeInfoAzure.getUserContainerName())) {
+            billableResources.add(AzureDlabBillableResource.builder()
+                    .id(edgeInfoAzure.getUserStorageAccountTagName())
+                    .type(DlabResourceType.EDGE_STORAGE_ACCOUNT)
+                    .user(edgeInfoAzure.getId()).build());
+        }
+
+        if (StringUtils.isNotEmpty(edgeInfoAzure.getInstanceId())) {
+            billableResources.add(AzureDlabBillableResource.builder()
+                    .id(edgeInfoAzure.getInstanceId())
+                    .type(DlabResourceType.EDGE)
+                    .user(edgeInfoAzure.getId()).build());
+
+            billableResources.add(AzureDlabBillableResource.builder()
+                    .id(serviceBaseName + "-" + 
edgeUserSimpleName(edgeInfoAzure) + "-edge-volume-primary")
+                    .type(DlabResourceType.VOLUME)
+                    .user(edgeInfoAzure.getId()).build());
+        }
+
+        return billableResources;
+    }
+
+    private String edgeUserSimpleName(EdgeInfoAzure edgeInfoAzure) {
+        return edgeInfoAzure.getId().replaceAll("@.*", "");
+    }
+
+    private Set<AzureDlabBillableResource> getNotebooksAndClusters() {
+
+        Set<AzureDlabBillableResource> billableResources = new HashSet<>();
+
+        try {
+            final FindIterable<Document> userInstanceDocuments = 
mongoDbBillingClient.getDatabase()
+                    .getCollection(MongoKeyWords.NOTEBOOK_COLLECTION)
+                    .find()
+                    
.projection(fields(exclude(USER_INSTANCES_EXCLUDED_FIELDS)));
+            List<UserInstanceDTO> userInstanceDTOS = objectMapper.readValue(
+                    objectMapper.writeValueAsString(userInstanceDocuments),
+                    new 
com.fasterxml.jackson.core.type.TypeReference<List<UserInstanceDTO>>() {
+                    });
+
+            if (userInstanceDTOS != null && !userInstanceDTOS.isEmpty()) {
+                userInstanceDTOS.forEach(e -> 
billableResources.addAll(getNotebookAndClusters(e)));
+            }
+
+        } catch (IOException e) {
+            log.error("Error during preparation of billable resources", e);
+        }
+
+        return billableResources;
+    }
+
+    private Set<AzureDlabBillableResource> 
getNotebookAndClusters(UserInstanceDTO userInstanceDTO) {
+        Set<AzureDlabBillableResource> notebookResources = new HashSet<>();
+
+        if (StringUtils.isNotEmpty(userInstanceDTO.getExploratoryId())) {
+            notebookResources.add(AzureDlabBillableResource.builder()
+                    .id(userInstanceDTO.getExploratoryId())
+                    .type(DlabResourceType.EXPLORATORY)
+                    .user(userInstanceDTO.getUser())
+                    .notebookId(userInstanceDTO.getExploratoryId())
+                    
.resourceName(userInstanceDTO.getExploratoryName()).build());
+            notebookResources.addAll(getVolumes(userInstanceDTO, 
userInstanceDTO.getExploratoryId(), "Volume primary",
+                    "Volume secondary"));
+
+            if (userInstanceDTO.getResources() != null && 
!userInstanceDTO.getResources().isEmpty()) {
+                for (UserComputationalResource userComputationalResource : 
userInstanceDTO.getResources()) {
+                    if 
(StringUtils.isNotEmpty(userComputationalResource.getComputationalId())) {
+
+                        
notebookResources.add(AzureDlabBillableResource.builder()
+                                
.id(userComputationalResource.getComputationalId())
+                                .type(DlabResourceType.COMPUTATIONAL)
+                                .user(userInstanceDTO.getUser())
+                                .notebookId(userInstanceDTO.getExploratoryId())
+                                
.resourceName(userComputationalResource.getComputationalName()).build());
+                        final List<AzureDlabBillableResource> volumes = 
getVolumes(userInstanceDTO,
+                                userComputationalResource.getComputationalId(),
+                                
userComputationalResource.getComputationalName() + " volume primary",
+                                
userComputationalResource.getComputationalName() + " volume secondary");
+                        notebookResources.addAll(volumes);
+
+                    } else {
+                        log.error("Computational with empty id {} is found in 
notebook {}. Skip it.",
+                                userComputationalResource, userInstanceDTO);
+                    }
+                }
+            }
+
+        } else {
+            log.error("Notebook {} with empty id id found. Skip it.", 
userInstanceDTO);
+        }
+
+        return notebookResources;
+    }
+
+    private List<AzureDlabBillableResource> getVolumes(UserInstanceDTO 
userInstanceDTO, String exploratoryId, String
+            primaryVolumeName, String secondaryVolumeName) {
+
+        return Arrays.asList(
+                AzureDlabBillableResource.builder()
+                        .id(exploratoryId + "-volume-primary")
+                        .type(DlabResourceType.VOLUME)
+                        .user(userInstanceDTO.getUser())
+                        .notebookId(userInstanceDTO.getExploratoryId())
+                        .resourceName(primaryVolumeName).build(),
+                AzureDlabBillableResource.builder()
+                        .id(exploratoryId + "-volume-secondary")
+                        .type(DlabResourceType.VOLUME)
+                        .user(userInstanceDTO.getUser())
+                        .notebookId(userInstanceDTO.getExploratoryId())
+                        .resourceName(secondaryVolumeName).build()
+        );
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to