Skip to content

Commit 14cd63a

Browse files
Merge pull request #562 from hobbit-project/develop
Developed version 2.0.17
2 parents e8c1d84 + 3dbf671 commit 14cd63a

File tree

61 files changed

+1378
-768
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+1378
-768
lines changed

.github/workflows/make.yml

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ name: make
22
on: push
33
jobs:
44
make:
5-
runs-on: ubuntu-20.04
5+
# https://docs.github.com/en/actions/using-jobs/choosing-the-runner-for-a-job
6+
runs-on: ubuntu-22.04
67
steps:
78
- uses: actions/checkout@v2
89
- uses: actions/setup-java@v1
@@ -13,4 +14,5 @@ jobs:
1314
node-version: 8
1415
- run: |
1516
docker swarm init
17+
- run: docker compose -f docker-compose-dev.yml pull cadvisor node-exporter prometheus rabbit redis
1618
- run: make test

Makefile

+5-23
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
# build platform components
2-
default: build
1+
build: build-dev-images
32

43
deploy: create-networks start
54

@@ -26,36 +25,19 @@ start-dev-platform:
2625
start-dev-elk:
2726
docker-compose -f docker-compose-elk.yml up -d
2827

29-
build: build-java build-dev-images
30-
31-
build-java: install-parent-pom build-controller build-storage build-analysis build-gui
32-
33-
build-gui:
34-
cd hobbit-gui/gui-client && sh -c 'test "$$TRAVIS" = "true" && npm ci; true' && sh -c 'test "$$TRAVIS" = "true" || npm install; true' && npm run build-prod
35-
cd hobbit-gui/gui-serverbackend && mvn clean package
36-
37-
build-controller:
38-
cd platform-controller && make build
39-
40-
build-storage:
41-
cd platform-storage/storage-service && mvn clean package -U
42-
43-
build-analysis:
44-
cd analysis-component && mvn clean package -U
45-
4628
build-dev-images: build-dev-platform-controller-image build-dev-gui-image build-dev-analysis-image build-dev-storage-image
4729

4830
build-dev-platform-controller-image:
49-
docker build -t hobbitproject/hobbit-platform-controller:dev ./platform-controller
31+
docker build -t hobbitproject/hobbit-platform-controller:dev --file platform-controller/Dockerfile .
5032

5133
build-dev-gui-image:
52-
docker build -t hobbitproject/hobbit-gui:dev ./hobbit-gui/gui-serverbackend
34+
docker build -t hobbitproject/hobbit-gui:dev --file hobbit-gui/gui-serverbackend/Dockerfile .
5335

5436
build-dev-analysis-image:
55-
docker build -t hobbitproject/hobbit-analysis-component:dev ./analysis-component
37+
docker build -t hobbitproject/hobbit-analysis-component:dev --file ./analysis-component/Dockerfile .
5638

5739
build-dev-storage-image:
58-
docker build -t hobbitproject/hobbit-storage-service:dev ./platform-storage/storage-service
40+
docker build -t hobbitproject/hobbit-storage-service:dev --file ./platform-storage/storage-service/Dockerfile .
5941

6042
create-networks:
6143
@docker network inspect hobbit >/dev/null || (docker network create -d overlay --attachable --subnet 172.16.100.0/24 hobbit && echo "Created network: hobbit")

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
[![Build Status](https://travis-ci.org/hobbit-project/platform.svg?branch=master)](https://travis-ci.org/hobbit-project/platform)
1+
[![make](https://github.com/hobbit-project/platform/actions/workflows/make.yml/badge.svg?branch=master)](https://github.com/hobbit-project/platform/actions/workflows/make.yml)
22

33
# HOBBIT platform
44

analysis-component/Dockerfile

+12-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
1-
FROM eclipse-temurin:11-focal
1+
FROM maven:3-eclipse-temurin-11 AS build
2+
WORKDIR /usr/src/hobbit-platform
3+
COPY parent-pom/pom.xml parent-pom/
4+
RUN mvn --file parent-pom -Dmaven.test.skip=true install
5+
ARG project=analysis-component
6+
COPY ${project}/pom.xml ${project}/
7+
RUN mvn --file ${project} dependency:go-offline
8+
COPY ${project}/src ${project}/src
9+
RUN mvn --file ${project} -Dmaven.test.skip=true package
210

3-
COPY target/analysis-component.jar .
4-
5-
CMD java -cp analysis-component.jar org.hobbit.core.run.ComponentStarter org.hobbit.analysis.AnalysisComponent
11+
FROM eclipse-temurin:11
12+
COPY --from=build /usr/src/hobbit-platform/analysis-component/target/analysis-component.jar .
13+
CMD ["java", "-cp", "analysis-component.jar", "org.hobbit.core.run.ComponentStarter", "org.hobbit.analysis.AnalysisComponent"]

analysis-component/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<groupId>org.hobbit</groupId>
1616
<artifactId>parent</artifactId>
17-
<version>${hobbitplatform.version}</version>
17+
<version>2.0.17</version>
1818
<relativePath>../parent-pom</relativePath>
1919
</parent>
2020
<artifactId>analysis-component</artifactId>

analysis-component/src/main/java/org/hobbit/analysis/AnalysisComponent.java

+53-15
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,42 @@
1616
*/
1717
package org.hobbit.analysis;
1818

19-
import java.util.stream.Stream;
20-
import java.util.stream.Collectors;
2119
import java.io.IOException;
22-
import java.util.*;
20+
import java.util.ArrayList;
21+
import java.util.Arrays;
22+
import java.util.Calendar;
23+
import java.util.Collections;
24+
import java.util.HashMap;
25+
import java.util.LinkedHashMap;
26+
import java.util.List;
27+
import java.util.Map;
28+
import java.util.Optional;
29+
import java.util.Set;
30+
import java.util.TreeSet;
31+
import java.util.concurrent.TimeUnit;
32+
import java.util.stream.Collectors;
33+
import java.util.stream.Stream;
2334

2435
import org.aksw.palmetto.evaluate.correlation.PearsonsSampleCorrelationCoefficient;
36+
import org.apache.commons.io.IOUtils;
2537
import org.apache.jena.datatypes.RDFDatatype;
2638
import org.apache.jena.datatypes.xsd.XSDDatatype;
27-
import org.apache.jena.rdf.model.*;
39+
import org.apache.jena.rdf.model.Model;
40+
import org.apache.jena.rdf.model.ModelFactory;
41+
import org.apache.jena.rdf.model.Property;
42+
import org.apache.jena.rdf.model.RDFNode;
43+
import org.apache.jena.rdf.model.ResIterator;
44+
import org.apache.jena.rdf.model.Resource;
45+
import org.apache.jena.rdf.model.ResourceFactory;
46+
import org.apache.jena.rdf.model.Statement;
47+
import org.apache.jena.rdf.model.StmtIterator;
2848
import org.apache.jena.vocabulary.DCTerms;
2949
import org.apache.jena.vocabulary.RDF;
3050
import org.apache.jena.vocabulary.XSD;
31-
import org.apache.commons.io.IOUtils;
3251
import org.hobbit.core.Constants;
3352
import org.hobbit.core.components.AbstractComponent;
3453
import org.hobbit.core.data.RabbitQueue;
54+
import org.hobbit.core.rabbit.QueueingConsumer;
3555
import org.hobbit.core.rabbit.RabbitMQUtils;
3656
import org.hobbit.storage.client.StorageServiceClient;
3757
import org.hobbit.storage.queries.SparqlQueries;
@@ -42,20 +62,31 @@
4262
import org.slf4j.Logger;
4363
import org.slf4j.LoggerFactory;
4464

45-
import com.rabbitmq.client.QueueingConsumer;
65+
import com.rabbitmq.client.Delivery;
4666

47-
import weka.attributeSelection.*;
4867
import weka.attributeSelection.AttributeSelection;
68+
import weka.attributeSelection.CfsSubsetEval;
69+
import weka.attributeSelection.GreedyStepwise;
4970
import weka.classifiers.functions.LinearRegression;
5071
import weka.clusterers.SimpleKMeans;
51-
import weka.core.*;
72+
import weka.core.Attribute;
73+
import weka.core.DenseInstance;
74+
import weka.core.Instance;
75+
import weka.core.Instances;
76+
import weka.core.SparseInstance;
5277

5378

5479
/**
5580
* This class implements the functionality for the Analysis Component
5681
* TODO:: !!REFACTOR INTO A MORE GENERIC DESIGN!!
5782
*/
5883
public class AnalysisComponent extends AbstractComponent {
84+
/**
85+
* The time the main receiver thread will sleep if it didn't receive any message
86+
* (in seconds).
87+
*/
88+
private static final int WAITING_TIME_BEFORE_CHECKING_STATUS = 60;
89+
5990
private static final Logger LOGGER = LoggerFactory.getLogger(AnalysisComponent.class);
6091
private static final String GRAPH_URI = Constants.PUBLIC_RESULT_GRAPH_URI;
6192
protected RabbitQueue controller2AnalysisQueue;
@@ -82,16 +113,24 @@ public void init() throws Exception {
82113
@Override
83114
public void run() throws Exception {
84115
LOGGER.info("Awaiting requests");
85-
QueueingConsumer.Delivery delivery;
116+
Delivery delivery;
86117
while (true) {
87-
delivery = consumer.nextDelivery();
118+
delivery = null;
119+
// Let's wait for a delivery for 60 seconds
120+
try {
121+
delivery = consumer.getDeliveryQueue().poll(WAITING_TIME_BEFORE_CHECKING_STATUS, TimeUnit.SECONDS);
122+
} catch (InterruptedException e) {
123+
// interrupted; just continue
124+
}
88125
if (delivery != null) {
89126
LOGGER.info("Received a request. Processing...");
90127
String expUri = RabbitMQUtils.readString(delivery.getBody());
91128
handleRequest(expUri);
129+
} else {
130+
// This would be the place at which we could react to signals, e.g., terminate
131+
// the service if needed.
92132
}
93133
}
94-
95134
}
96135

97136
protected void handleRequest(String expUri) {
@@ -235,18 +274,17 @@ public void close() throws IOException {
235274
* The model of the experiment
236275
* @return Returns the analyzed model
237276
*/
238-
239-
/**
277+
/*
240278
private AnalysisModel analyseExperiment(Model experimentModel, String expUri){
241279
AnalysisModel analysisModel = new AnalysisModel(experimentModel, expUri);
242280
analysisModel.analyse();
243281
return analysisModel;
244282
}*/
245283

246-
private void notifyQueue(){
284+
/*private void notifyQueue(){
247285
//TODO:: return the status of component
248286
249-
}
287+
}*/
250288

251289
/**
252290
* This class implements the functionality of the Analysis Model which

docker-compose-dev.yml

+26-18
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,20 @@ services:
99
HOBBIT_RABBIT_IMAGE: "rabbitmq:management"
1010
HOBBIT_RABBIT_HOST: "rabbit"
1111
HOBBIT_REDIS_HOST: "redis"
12-
DEPLOY_ENV: "testing"
12+
DEPLOY_ENV: "develop"
1313
GITLAB_USER: "${GITLAB_USER}"
1414
GITLAB_EMAIL: "${GITLAB_EMAIL}"
1515
GITLAB_TOKEN: "${GITLAB_TOKEN}"
16-
LOGGING_GELF_ADDRESS: "udp://localhost:12201"
16+
#LOGGING_GELF_ADDRESS: "udp://localhost:12201"
1717
SWARM_NODE_NUMBER: "1"
1818
PROMETHEUS_HOST: prometheus
1919
PROMETHEUS_PORT: 9090
20+
USE_GITLAB: "false"
21+
LOCAL_METADATA_DIRECTORY: "/metadata"
22+
DOCKER_AUTOPULL: "0"
2023
volumes:
2124
- /var/run/docker.sock:/var/run/docker.sock
25+
- ./metadata:/metadata
2226

2327
# HOBBIT GUI
2428
gui:
@@ -36,20 +40,21 @@ services:
3640
- KEYCLOAK_DIRECT_URL=http://keycloak:8080/auth
3741
- ELASTICSEARCH_HOST=elasticsearch
3842
- ELASTICSEARCH_HTTP_PORT=9200
43+
- USE_UI_AUTH=false
3944
#volumes:
4045
#- /data/docker/messages/global.html:/var/lib/jetty/webapps/messages/global.html
4146
#- /data/docker/messages/benchmark.html:/var/lib/jetty/webapps/messages/benchmark.html
4247
#- /data/docker/messages/status.html:/var/lib/jetty/webapps/messages/status.html
4348

4449
# Keycloak user management (used by the GUI)
45-
keycloak:
46-
image: hobbitproject/hobbit-keycloak:latest
47-
ports:
48-
- "8181:8080"
49-
networks:
50-
- hobbit
51-
volumes:
52-
- ./config/keycloak:/opt/jboss/keycloak/standalone/data/db
50+
# keycloak:
51+
# image: hobbitproject/hobbit-keycloak:latest
52+
# ports:
53+
# - "8181:8080"
54+
# networks:
55+
# - hobbit
56+
# volumes:
57+
# - ./config/keycloak:/opt/jboss/keycloak/standalone/data/db
5358

5459
# HOBBIT Analysis component
5560
analysis:
@@ -90,7 +95,8 @@ services:
9095
stop_signal: SIGINT
9196
stop_grace_period: 2m
9297
volumes:
93-
- ./config/db:/opt/virtuoso-opensource/database
98+
- ./config/db:/opt/virtuoso-opensource/var/lib/virtuoso/db
99+
#- ./config/db:/opt/virtuoso-opensource/database
94100
networks:
95101
- hobbit-core
96102
ports:
@@ -104,16 +110,16 @@ services:
104110
environment:
105111
- SPARQL_ENDPOINT_URL=http://vos:8890/sparql
106112
- HOBBIT_RABBIT_HOST=rabbit
107-
- SPARQL_ENDPOINT_USERNAME=HobbitPlatform
108-
- SPARQL_ENDPOINT_PASSWORD=Password
113+
- SPARQL_ENDPOINT_USERNAME=dba
114+
- SPARQL_ENDPOINT_PASSWORD=dba
109115

110116
node-exporter:
111117
image: prom/node-exporter
112118
networks:
113119
- hobbit-core
114120

115121
cadvisor:
116-
image: google/cadvisor
122+
image: gcr.io/cadvisor/cadvisor
117123
networks:
118124
- hobbit-core
119125
volumes:
@@ -138,8 +144,10 @@ services:
138144

139145
networks:
140146
hobbit:
141-
external:
142-
name: hobbit
147+
name: hobbit
148+
external: true
149+
driver: overlay
143150
hobbit-core:
144-
external:
145-
name: hobbit-core
151+
name: hobbit-core
152+
external: true
153+
driver: overlay
-12 KB
Binary file not shown.

hobbit-gui/gui-client/src/app/auth/keycloak.service.ts

+14
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@ export class KeycloakService {
1818
req.onload = (e) => {
1919
const keycloakConfig = JSON.parse(req.responseText);
2020

21+
if (keycloakConfig.clientId === 'DISABLED') {
22+
console.log('UI auth is disabled');
23+
KeycloakService.auth.loggedIn = true;
24+
KeycloakService.auth.authz = true;
25+
resolve(null);
26+
return;
27+
}
28+
2129
const keycloakAuth: any = Keycloak(keycloakConfig);
2230
keycloakAuth.init({ onLoad: 'login-required' })
2331
.success(() => {
@@ -66,6 +74,12 @@ export class KeycloakService {
6674
.error(() => {
6775
reject('Failed to refresh token');
6876
});
77+
} else {
78+
if (KeycloakService.auth.authz === true) {
79+
resolve(null);
80+
return;
81+
}
82+
reject('No token');
6983
}
7084
});
7185
}

hobbit-gui/gui-client/src/app/custom-http.service.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,17 @@ export class CustomHttp {
9393

9494
const obs = Observable.fromPromise(this.keycloakService.getToken()).map(token => {
9595
const requestUrl = environment.backendUrl + url.substr(environment.backendPrefix.length);
96-
const headers = { 'Authorization': 'bearer ' + token };
96+
const headers = {};
97+
if (token !== null) {
98+
Object.assign(headers, {Authorization: 'bearer ' + token});
99+
}
97100
let requestOptions = options;
98101
if (!options)
99102
requestOptions = { 'headers': new HttpHeaders(headers) };
100103
else if (!options.headers)
101104
requestOptions.headers = new HttpHeaders(headers);
102105
else
103-
requestOptions.headers = requestOptions.headers.set('Authorization', headers['Authorization']);
106+
Object.assign(requestOptions.headers, headers);
104107
return { url: requestUrl, options: requestOptions };
105108
});
106109
return obs;

0 commit comments

Comments
 (0)