Skip to content

Commit be03b84

Browse files
committed
#56 fix priorities calculation for REST API
1 parent 1e35f3a commit be03b84

File tree

2 files changed

+37
-10
lines changed

2 files changed

+37
-10
lines changed

src/main/java/pl/cyfronet/indigo/repository/DocumentWeightRepository.java

+1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@
88
* Created by mszostak on 12.04.17.
99
*/
1010
public interface DocumentWeightRepository extends CrudRepository<DocumentWeight, DocumentWeightPk> {
11+
DocumentWeight findByDocument(String document);
1112
}

src/main/java/pl/cyfronet/indigo/rest/util/IndigoConverter.java

+36-10
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.springframework.beans.factory.annotation.Autowired;
99
import org.springframework.stereotype.Component;
1010
import pl.cyfronet.indigo.engine.extension.bean.IndigoDocument;
11+
import pl.cyfronet.indigo.repository.DocumentWeightRepository;
1112
import pl.cyfronet.indigo.rest.bean.IndigoWrapper;
1213
import pl.cyfronet.indigo.rest.bean.preferences.Preference;
1314
import pl.cyfronet.indigo.rest.bean.preferences.Preferences;
@@ -28,6 +29,9 @@ public class IndigoConverter {
2829
@Autowired
2930
private MetricFacade metricFacade;
3031

32+
@Autowired
33+
private DocumentWeightRepository documentWeightRepository;
34+
3135
public IndigoWrapper convertSlasListForRestApi(List<Document> slas, String login) {
3236
IndigoWrapper result = IndigoWrapper.builder().
3337
preferences(Arrays.asList(preparePreferences(slas, login))).
@@ -43,25 +47,47 @@ private Preferences preparePreferences(List<Document> slas, String login) {
4347
List<Priority> storagePriorities = new ArrayList<>();
4448
for (Document sla : slas) {
4549
if (sla.getState("serviceType").equals("computing")) {
46-
addPriorities(computePriorities, sla, ((IndigoDocument)sla).getSite(), "weightComputing");
50+
addPriorities(computePriorities, sla, ((IndigoDocument) sla).getSite(), "weightComputing");
4751
} else {
48-
addPriorities(storagePriorities, sla, ((IndigoDocument)sla).getSite(), "weightStorage");
52+
addPriorities(storagePriorities, sla, ((IndigoDocument) sla).getSite(), "weightStorage");
4953
}
5054
}
51-
result.setPreferences(preparePreference(computePriorities, storagePriorities));
55+
result.setPreferences(preparePreference(normalizePriorities(computePriorities), normalizePriorities(storagePriorities)));
5256
return result;
5357
}
5458

59+
private List<Priority> normalizePriorities(List<Priority> priorities) {
60+
//k -> group number 1...n
61+
//n -> number of groups
62+
// 1 / (n -1) * k
63+
Double one = new Double(1);
64+
Double groupNumber = getGroupNumber(priorities);
65+
priorities.forEach(priority -> {
66+
priority.setWeight(one / (groupNumber - one) * priority.getWeight());
67+
});
68+
return priorities;
69+
}
70+
71+
private Double getGroupNumber(List<Priority> priorities) {
72+
Double result = new Double(0);
73+
for (Priority priority: priorities) {
74+
if(priority.getWeight()>result) result = priority.getWeight();
75+
}
76+
return ++result;
77+
}
78+
5579
private void addPriorities(List<Priority> priorities, Document sla, String serviceId, String weight) {
5680
Priority priority = Priority.builder().
5781
sla_id(sla.getId()).
5882
service_id(serviceId).
59-
//TODO - RESTORE IT
60-
// weight(Double.parseDouble(sla.getMetrics().get(weight).toString())).build();
61-
weight(0.5).build();
83+
weight(getWeight(sla.getId())).build();
6284
priorities.add(priority);
6385
}
6486

87+
private Double getWeight(String id) {
88+
return new Double(documentWeightRepository.findByDocument(id).getWeight());
89+
}
90+
6591
private List<Preference> preparePreference(List<Priority> computePriorities, List<Priority> storagePriorities) {
6692
Preference computing = Preference.builder().service_type("compute").priority(computePriorities).build();
6793
Preference storage = Preference.builder().service_type("storage").priority(storagePriorities).build();
@@ -72,7 +98,7 @@ private List<Preference> preparePreference(List<Priority> computePriorities, Lis
7298
public List<Sla> prepareSlaList(List<Document> slas, String login) {
7399
List<Sla> result = new ArrayList<>();
74100
for (Document _doc : slas) {
75-
IndigoDocument doc = (IndigoDocument)_doc;
101+
IndigoDocument doc = (IndigoDocument) _doc;
76102
Document provider = null;
77103
Sla.SlaBuilder slaBuilder = Sla.builder().id(doc.getId()).provider(doc.getProviderId());
78104

@@ -111,12 +137,12 @@ private List<Target> prepareTargets(Document sla) {
111137

112138
Map<String, Target> restrictions = new HashMap<>();
113139

114-
for(Metric metric : documentMetrics) {
140+
for (Metric metric : documentMetrics) {
115141

116-
if(sla.getMetrics().containsKey(metric.getId()) && metric.getId().contains("-")) {
142+
if (sla.getMetrics().containsKey(metric.getId()) && metric.getId().contains("-")) {
117143
String key = metric.getId().split("-")[0];
118144
String constraint = metric.getId().split("-")[1];
119-
if(!restrictions.containsKey(key)) {
145+
if (!restrictions.containsKey(key)) {
120146
restrictions.put(key, Target.builder().type(key).unit(metric.getUnit()).restrictions(new HashMap<>()).build());
121147
}
122148

0 commit comments

Comments
 (0)