From e9dc6a87ffdfc0872adda8fcba79b9953b524545 Mon Sep 17 00:00:00 2001 From: Ali Sadeghi <220201944@ostimteknik.edu.tr> Date: Tue, 19 Aug 2025 04:15:05 +0300 Subject: [PATCH] Add city to datacenter, cloudsystem to summary, fix listener --- .../graphql/dataCenter/domain/DataCenter.java | 12 +++++ .../mutation/input/DataCenterCreateInput.java | 5 ++ .../mutation/input/DataCenterUpdateInput.java | 4 ++ .../mutation/mapper/DataCenterMapper.java | 11 ++++- .../mainDataTable/dto/VMEmissionSummary.java | 10 ++-- .../query/MainDataTableQueryResolver.java | 4 +- .../service/MainDataTableService.java | 21 ++------- .../sgs/utils/rabbitMQ/MessageListener.java | 47 ++++++++++++++++--- .../src/main/resources/application.properties | 4 +- .../graphql/dataCenter/input.graphqls | 2 + .../graphql/dataCenter/type.graphqls | 1 + .../graphql/mainDataTable/query.graphqls | 2 +- .../graphql/mainDataTable/type.graphqls | 2 +- 13 files changed, 89 insertions(+), 36 deletions(-) diff --git a/sge-backend/src/main/java/com/sgs/graphql/dataCenter/domain/DataCenter.java b/sge-backend/src/main/java/com/sgs/graphql/dataCenter/domain/DataCenter.java index 368662a..90f9064 100644 --- a/sge-backend/src/main/java/com/sgs/graphql/dataCenter/domain/DataCenter.java +++ b/sge-backend/src/main/java/com/sgs/graphql/dataCenter/domain/DataCenter.java @@ -2,6 +2,7 @@ package com.sgs.graphql.dataCenter.domain; import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonManagedReference; import com.sgs.graphql.area.domain.Area; +import com.sgs.graphql.city.domain.City; import com.sgs.graphql.sector.domain.Sector; import com.sgs.graphql.subSector.domain.SubSector; import com.sgs.graphql.emissionScope.domain.EmissionScope; @@ -29,6 +30,7 @@ public class DataCenter extends BaseDomain { private Integer number; private Area area; + private City city; private List physicalMachines = new ArrayList<>(); private List dataCenterEmissionSources = new ArrayList<>(); @@ -134,6 +136,16 @@ public class DataCenter extends BaseDomain { this.area = area; } + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "city_id") + public City getCity() { + return city; + } + + public void setCity(City city) { + this.city = city; + } + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "sub_sector_id") public SubSector getSubSector() { diff --git a/sge-backend/src/main/java/com/sgs/graphql/dataCenter/mutation/input/DataCenterCreateInput.java b/sge-backend/src/main/java/com/sgs/graphql/dataCenter/mutation/input/DataCenterCreateInput.java index d6cc527..234245a 100644 --- a/sge-backend/src/main/java/com/sgs/graphql/dataCenter/mutation/input/DataCenterCreateInput.java +++ b/sge-backend/src/main/java/com/sgs/graphql/dataCenter/mutation/input/DataCenterCreateInput.java @@ -19,6 +19,8 @@ public class DataCenterCreateInput extends BaseCreateInput { @NotNull(message = "Alan ID gereklidir") private UUID areaId; + private UUID cityId; + @NotNull(message = "Sektör ID gereklidir") private UUID sectorId; @@ -51,6 +53,9 @@ public class DataCenterCreateInput extends BaseCreateInput { public UUID getAreaId() { return areaId; } public void setAreaId(UUID areaId) { this.areaId = areaId; } + public UUID getCityId() { return cityId; } + public void setCityId(UUID cityId) { this.cityId = cityId; } + public UUID getSectorId() { return sectorId; } public void setSectorId(UUID sectorId) { this.sectorId = sectorId; } diff --git a/sge-backend/src/main/java/com/sgs/graphql/dataCenter/mutation/input/DataCenterUpdateInput.java b/sge-backend/src/main/java/com/sgs/graphql/dataCenter/mutation/input/DataCenterUpdateInput.java index 462cca0..6a30fea 100644 --- a/sge-backend/src/main/java/com/sgs/graphql/dataCenter/mutation/input/DataCenterUpdateInput.java +++ b/sge-backend/src/main/java/com/sgs/graphql/dataCenter/mutation/input/DataCenterUpdateInput.java @@ -11,6 +11,7 @@ public class DataCenterUpdateInput extends BaseUpdateInput { private Double consuptionAmount; private UUID areaId; + private UUID cityId; private UUID sectorId; private UUID subSectorId; private UUID emissionScopeId; @@ -41,6 +42,9 @@ public class DataCenterUpdateInput extends BaseUpdateInput { public UUID getAreaId() { return areaId; } public void setAreaId(UUID areaId) { this.areaId = areaId; } + public UUID getCityId() { return cityId; } + public void setCityId(UUID cityId) { this.cityId = cityId; } + public UUID getSectorId() { return sectorId; } public void setSectorId(UUID sectorId) { this.sectorId = sectorId; } diff --git a/sge-backend/src/main/java/com/sgs/graphql/dataCenter/mutation/mapper/DataCenterMapper.java b/sge-backend/src/main/java/com/sgs/graphql/dataCenter/mutation/mapper/DataCenterMapper.java index 1419cf2..09a3b11 100644 --- a/sge-backend/src/main/java/com/sgs/graphql/dataCenter/mutation/mapper/DataCenterMapper.java +++ b/sge-backend/src/main/java/com/sgs/graphql/dataCenter/mutation/mapper/DataCenterMapper.java @@ -12,6 +12,7 @@ import com.sgs.graphql.emissionSource.service.EmissionSourceService; import com.sgs.graphql.emissionScope.service.EmissionScopeService; import com.sgs.graphql.consuptionUnit.service.ConsuptionUnitService; import com.sgs.graphql.activitySubUnit.service.ActivitySubUnitService; +import com.sgs.graphql.city.service.CityService; import com.sgs.lib.dao.mutation.mapper.BaseCreateUpdateMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -29,12 +30,13 @@ public class DataCenterMapper extends BaseCreateUpdateMapper vmEmissionSummary(UUID datacenterId, UUID projectId) { - return mainDataTableService.getVMEmissionSummaries(datacenterId, projectId); + public List vmEmissionSummary(UUID datacenterId) { + return mainDataTableService.getVMEmissionSummaries(datacenterId); } } diff --git a/sge-backend/src/main/java/com/sgs/graphql/mainDataTable/service/MainDataTableService.java b/sge-backend/src/main/java/com/sgs/graphql/mainDataTable/service/MainDataTableService.java index 77eb142..7907210 100644 --- a/sge-backend/src/main/java/com/sgs/graphql/mainDataTable/service/MainDataTableService.java +++ b/sge-backend/src/main/java/com/sgs/graphql/mainDataTable/service/MainDataTableService.java @@ -33,24 +33,16 @@ public class MainDataTableService extends BaseService getVMEmissionSummaries() { - return getVMEmissionSummaries(null, null); + return getVMEmissionSummaries(null); } public List getVMEmissionSummaries(UUID datacenterId) { - return getVMEmissionSummaries(datacenterId, null); - } - - public List getVMEmissionSummaries(UUID datacenterId, UUID projectId) { List whereConditions = new ArrayList<>(); if (datacenterId != null) { whereConditions.add("dc.id = decode(replace(:datacenterId, '-', ''), 'hex')"); } - if (projectId != null) { - whereConditions.add("p.id = decode(replace(:projectId, '-', ''), 'hex')"); - } - String whereClause = whereConditions.isEmpty() ? "" : "WHERE " + String.join(" AND ", whereConditions) + " "; @@ -63,7 +55,7 @@ public class MainDataTableService extends BaseService results = query.getResultList(); @@ -111,7 +98,7 @@ public class MainDataTableService extends BaseService emissionSources = emissionSourceRepo.findByTag(emissionSourceName); - if (emissionSources.isEmpty()) { + // Find the emission source by name/tag from datacenter's configured emission sources + EmissionSource emissionSource = null; + + // First, try to find the emission source from datacenter's configured sources + if (dataCenter.getDataCenterEmissionSources() != null && !dataCenter.getDataCenterEmissionSources().isEmpty()) { + for (DataCenterEmissionSource dces : dataCenter.getDataCenterEmissionSources()) { + if (dces.getEmissionSource() != null && + emissionSourceName.equalsIgnoreCase(dces.getEmissionSource().getTag())) { + emissionSource = dces.getEmissionSource(); + System.out.println("✅ Found emission source '" + emissionSourceName + + "' in datacenter's configured sources (ID: " + emissionSource.getId() + ")"); + break; + } + } + } + + // If not found in datacenter's sources, fall back to subsector-specific search + if (emissionSource == null && dataCenter.getSubSector() != null) { + emissionSource = emissionSourceRepo.findByTagAndSubSectorIgnoreCase(emissionSourceName, dataCenter.getSubSector()); + if (emissionSource != null) { + System.out.println("⚠️ Using subsector fallback for emission source '" + emissionSourceName + + "' (ID: " + emissionSource.getId() + ") - Consider configuring it for datacenter"); + } + } + + // Last resort: global search + if (emissionSource == null) { + List emissionSources = emissionSourceRepo.findByTag(emissionSourceName); + if (!emissionSources.isEmpty()) { + emissionSource = emissionSources.get(0); + System.out.println("⚠️ Using global fallback for emission source '" + emissionSourceName + + "' (ID: " + emissionSource.getId() + ") - This may cause incorrect calculations!"); + } + } + + if (emissionSource == null) { System.err.println("❌ Could not find emission source: " + emissionSourceName); return false; } - EmissionSource emissionSource = emissionSources.get(0); - // Calculate power consumption for this emission source (percentage of total VM power) double sourceSpecificPower = vm.getPower() * (percentage / 100.0); diff --git a/sge-backend/src/main/resources/application.properties b/sge-backend/src/main/resources/application.properties index 32c28b9..51df4ed 100644 --- a/sge-backend/src/main/resources/application.properties +++ b/sge-backend/src/main/resources/application.properties @@ -22,8 +22,8 @@ app.survey.base-url=http://localhost.com # spring.rabbitmq.username=testuser # spring.rabbitmq.password=JGasF24561AZv2894De -spring.rabbitmq.host=rabbitmq -#spring.rabbitmq.host=localhost +#spring.rabbitmq.host=rabbitmq +spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest diff --git a/sge-backend/src/main/resources/graphql/dataCenter/input.graphqls b/sge-backend/src/main/resources/graphql/dataCenter/input.graphqls index 4c5cb3f..ec46a32 100644 --- a/sge-backend/src/main/resources/graphql/dataCenter/input.graphqls +++ b/sge-backend/src/main/resources/graphql/dataCenter/input.graphqls @@ -11,6 +11,7 @@ input DataCenterCreateInput { consuptionAmount: Float areaId: ID + cityId: ID number: Int ayposURL: String address: String @@ -31,6 +32,7 @@ input DataCenterUpdateInput { consuptionAmount: Float areaId: ID + cityId: ID number: Int ayposURL: String address: String diff --git a/sge-backend/src/main/resources/graphql/dataCenter/type.graphqls b/sge-backend/src/main/resources/graphql/dataCenter/type.graphqls index c6b5929..7554f2d 100644 --- a/sge-backend/src/main/resources/graphql/dataCenter/type.graphqls +++ b/sge-backend/src/main/resources/graphql/dataCenter/type.graphqls @@ -15,6 +15,7 @@ type DataCenter { physicalMachines: [PhysicalMachine] area: Area + city: City number: Int ayposURL: String diff --git a/sge-backend/src/main/resources/graphql/mainDataTable/query.graphqls b/sge-backend/src/main/resources/graphql/mainDataTable/query.graphqls index 5a05347..fa85239 100644 --- a/sge-backend/src/main/resources/graphql/mainDataTable/query.graphqls +++ b/sge-backend/src/main/resources/graphql/mainDataTable/query.graphqls @@ -2,5 +2,5 @@ extend type Query{ mainDataTable(id: ID!): MainDataTable! mainDataTables(criteria: MainDataTableCriteria, sortBy: [SortBy!]): [MainDataTable!] paginateMainDataTables(pagination : Pagination!, criteria: MainDataTableCriteria, sortBy:[SortBy!] ) : MainDataTablePageable! - vmEmissionSummary(datacenterId: ID, projectId: ID): [VMEmissionSummary!]! + vmEmissionSummary(datacenterId: ID): [VMEmissionSummary!]! } \ No newline at end of file diff --git a/sge-backend/src/main/resources/graphql/mainDataTable/type.graphqls b/sge-backend/src/main/resources/graphql/mainDataTable/type.graphqls index 0424e35..57e6360 100644 --- a/sge-backend/src/main/resources/graphql/mainDataTable/type.graphqls +++ b/sge-backend/src/main/resources/graphql/mainDataTable/type.graphqls @@ -60,7 +60,7 @@ type Config { totalEmission: Float! createdDate: LocalDateTime! physicalMachine: String - project: String + cloudSystem: String dataCenter: String # Individual emission values per record co2: Float!