Commit d45e9d4b authored by Spiros Koulouzis's avatar Spiros Koulouzis

added timeout

parent 80c0c3f6
version: '3'
services:
#nginx:
#image: nginx
#volumes:
#- ./nginx.conf:/etc/nginx/nginx.conf
#- ./cert.pem:/etc/nginx/cert.pem
#- ./privkey.pem:/etc/nginx/privkey.pem
##- ./www:/data/www
#ports:
#- "80:80"
#- "443:443"
nginx:
image: nginx
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./cert.pem:/etc/nginx/cert.pem
- ./privkey.pem:/etc/nginx/privkey.pem
#- ./www:/data/www
ports:
- "80:80"
- "443:443"
#rabbit:
#image: rabbitmq:3.8-management
#ports:
#- "5671-5672:5671-5672"
#- "15672:15672"
#- "4369:4369"
#- "15671:15671"
rabbit:
image: rabbitmq:3.8-management
ports:
- "5671-5672:5671-5672"
- "15672:15672"
- "4369:4369"
- "15671:15671"
mysql:
image: mysql:5.7
......@@ -49,18 +49,18 @@ services:
depends_on:
- mysql
#mongo:
#image: mongo:4
#ports:
#- "27017:27017"
mongo:
image: mongo:4
ports:
- "27017:27017"
#sure-tosca:
#image: qcdis/sure-tosca
#ports:
#- "8081:8081"
sure-tosca:
image: qcdis/sure-tosca
ports:
- "8081:8081"
......
......@@ -12,25 +12,25 @@ services:
- "80:80"
- "443:443"
#rabbit:
#image: rabbitmq:3.8-management
#ports:
#- "5671-5672:5671-5672"
#- "15672:15672"
#- "4369:4369"
#- "15671:15671"
rabbit:
image: rabbitmq:3.8-management
ports:
- "5671-5672:5671-5672"
- "15672:15672"
- "4369:4369"
- "15671:15671"
#mysql:
#image: mysql:5.7
#volumes:
#- ./mysql.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
#environment:
#MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
#MYSQL_DATABASE: semaphore
#MYSQL_USER: semaphore
#MYSQL_PASSWORD: semaphore
##ports:
##- "3306:3306"
mysql:
image: mysql:5.7
volumes:
- ./mysql.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
environment:
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
MYSQL_DATABASE: semaphore
MYSQL_USER: semaphore
MYSQL_PASSWORD: semaphore
#ports:
#- "3306:3306"
semaphore:
image: qcdis/docker_ansible_semaphore
......@@ -81,21 +81,21 @@ services:
ports:
- "3001:3000"
manager:
depends_on:
- rabbit
- mongo
- sure-tosca
image: qcdis/manager
environment:
RABBITMQ_HOST: rabbit
MONGO_HOST: mongo
SURE_TOSCA_BASE_PATH: http://sure-tosca:8081/tosca-sure/1.0.0
CREDENTIAL_SECRET: top_secret
ports:
- "8080:8080"
#manager:
#depends_on:
#- rabbit
#- mongo
#- sure-tosca
#image: qcdis/manager
#environment:
#RABBITMQ_HOST: rabbit
#MONGO_HOST: mongo
#SURE_TOSCA_BASE_PATH: http://sure-tosca:8081/tosca-sure/1.0.0
#CREDENTIAL_SECRET: top_secret
#ports:
#- "8080:8080"
sure-tosca:
image: qcdis/sure-tosca
......
......@@ -43,18 +43,23 @@ public class PlannerApiController implements PlannerApi {
// String accept = request.getHeader("Accept");
// if (accept != null && accept.contains("text/plain")) {
try {
String planedYemplateId = dripService.plan(id);
return new ResponseEntity<>(planedYemplateId, HttpStatus.OK);
} catch (ApiException | NotFoundException | IOException | TimeoutException | InterruptedException ex) {
java.util.logging.Logger.getLogger(PlannerApiController.class.getName()).log(Level.SEVERE, null, ex);
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
try {
String planedYemplateId = dripService.plan(id);
return new ResponseEntity<>(planedYemplateId, HttpStatus.OK);
} catch (NotFoundException | java.util.NoSuchElementException ex) {
java.util.logging.Logger.getLogger(ToscaTemplateApiController.class.getName()).log(Level.WARNING, null, ex);
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
} catch (TimeoutException ex) {
java.util.logging.Logger.getLogger(PlannerApiController.class.getName()).log(Level.SEVERE, null, ex);
return new ResponseEntity<>(HttpStatus.GATEWAY_TIMEOUT);
} catch (ApiException | IOException | InterruptedException ex) {
java.util.logging.Logger.getLogger(PlannerApiController.class.getName()).log(Level.SEVERE, null, ex);
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
// } else {
// return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE);
// }
}
}
......@@ -54,38 +54,40 @@ public class ToscaTemplateApiController implements ToscaTemplateApi {
@Valid @RequestParam(value = "node_names", required = false) List<String> nodeName) {
// String accept = request.getHeader("Accept");
// if (accept != null && accept.contains("text/plain")) {
try {
dripService.delete(id, nodeName);
return new ResponseEntity<>(id, HttpStatus.OK);
} catch (IOException | ApiException | TypeExeption | TimeoutException | InterruptedException ex) {
java.util.logging.Logger.getLogger(ToscaTemplateApiController.class.getName()).log(Level.SEVERE, null, ex);
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
} catch (NotFoundException ex) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
try {
dripService.delete(id, nodeName);
return new ResponseEntity<>(id, HttpStatus.OK);
} catch (IOException | ApiException | TypeExeption | TimeoutException | InterruptedException ex) {
java.util.logging.Logger.getLogger(ToscaTemplateApiController.class.getName()).log(Level.SEVERE, null, ex);
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
} catch (NotFoundException ex) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
// } else {
// return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE);
// }
}
@Override
public ResponseEntity<String> getToscaTemplateByID(@ApiParam(value = "ID of topolog template to return", required = true)
@PathVariable("id") String id) {
public ResponseEntity<String> getToscaTemplateByID(@ApiParam(value = "ID of topolog template to return", required = true)
@PathVariable("id") String id) {
// String accept = request.getHeader("Accept");
// if (accept != null && accept.contains("text/plain")) {
try {
java.util.logging.Logger.getLogger(ToscaTemplateApiController.class.getName()).log(Level.INFO, "Requestsed ID: {0}", id);
String ymlStr = toscaTemplateService.findByID(id);
return new ResponseEntity<>(ymlStr, HttpStatus.OK);
} catch (JsonProcessingException | NotFoundException ex) {
java.util.logging.Logger.getLogger(ToscaTemplateApiController.class.getName()).log(Level.SEVERE, null, ex);
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
try {
java.util.logging.Logger.getLogger(ToscaTemplateApiController.class.getName()).log(Level.INFO, "Requestsed ID: {0}", id);
String ymlStr = toscaTemplateService.findByID(id);
return new ResponseEntity<>(ymlStr, HttpStatus.OK);
} catch (NotFoundException | java.util.NoSuchElementException ex) {
java.util.logging.Logger.getLogger(ToscaTemplateApiController.class.getName()).log(Level.WARNING, null, ex);
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
} catch (JsonProcessingException ex) {
java.util.logging.Logger.getLogger(ToscaTemplateApiController.class.getName()).log(Level.SEVERE, null, ex);
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
// } else {
// return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE);
// }
}
@Override
......@@ -95,14 +97,14 @@ public class ToscaTemplateApiController implements ToscaTemplateApi {
@Valid @RequestPart("file") MultipartFile file) {
// String accept = request.getHeader("Accept");
// if (accept != null && accept.contains("text/plain")) {
try {
id = toscaTemplateService.updateToscaTemplateByID(id, file);
return new ResponseEntity<>(id, HttpStatus.OK);
} catch (IOException e) {
log.error("Couldn't serialize response for content type ", e);
java.util.logging.Logger.getLogger(ToscaTemplateApiController.class.getName()).log(Level.SEVERE, null, e);
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
try {
id = toscaTemplateService.updateToscaTemplateByID(id, file);
return new ResponseEntity<>(id, HttpStatus.OK);
} catch (IOException e) {
log.error("Couldn't serialize response for content type ", e);
java.util.logging.Logger.getLogger(ToscaTemplateApiController.class.getName()).log(Level.SEVERE, null, e);
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
// } else {
// return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE);
// }
......@@ -112,14 +114,14 @@ public class ToscaTemplateApiController implements ToscaTemplateApi {
public ResponseEntity<String> uploadToscaTemplate(@ApiParam(value = "file detail") @Valid @RequestPart("file") MultipartFile file) {
// String accept = request.getHeader("Accept");
// if (accept != null && accept.contains("*/*")) {
try {
String id = toscaTemplateService.saveFile(file);
return new ResponseEntity<>(id, HttpStatus.OK);
} catch (IOException e) {
java.util.logging.Logger.getLogger(ToscaTemplateApiController.class.getName()).log(Level.SEVERE, null, e);
log.error("Couldn't serialize response for content type application/json", e);
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
try {
String id = toscaTemplateService.saveFile(file);
return new ResponseEntity<>(id, HttpStatus.OK);
} catch (IOException e) {
java.util.logging.Logger.getLogger(ToscaTemplateApiController.class.getName()).log(Level.SEVERE, null, e);
log.error("Couldn't serialize response for content type application/json", e);
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
// } else {
// return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE);
// }
......@@ -130,8 +132,8 @@ public class ToscaTemplateApiController implements ToscaTemplateApi {
public ResponseEntity<List<String>> getToscaTemplateIDs() {
// String accept = request.getHeader("Accept");
// if (accept != null && accept.contains("application/json")) {
List<String> ids = toscaTemplateService.getAllIds();
return new ResponseEntity<>(ids, HttpStatus.OK);
List<String> ids = toscaTemplateService.getAllIds();
return new ResponseEntity<>(ids, HttpStatus.OK);
// } else {
// return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE);
// }
......
......@@ -9,9 +9,12 @@ import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.logging.Level;
import java.util.logging.Logger;
......@@ -64,7 +67,11 @@ public class DRIPCaller implements AutoCloseable {
connection = factory.newConnection();
channel = connection.createChannel();
// create a single callback queue per client not per requests.
// Map<String, Object> args = new HashMap<String, Object>();
// args.put("x-message-ttl", 60000);
// channel.queueDeclare("myqueue", false, false, false, args);
replyQueueName = channel.queueDeclare().getQueue();
}
}
......@@ -107,9 +114,11 @@ public class DRIPCaller implements AutoCloseable {
final String corrId = UUID.randomUUID().toString();
AMQP.BasicProperties props = new AMQP.BasicProperties.Builder()
.correlationId(corrId)
.expiration("10000")
.replyTo(getReplyQueueName())
.build();
Logger.getLogger(DRIPCaller.class.getName()).log(Level.INFO, "Sending: {0} to queue: {1}", new Object[]{jsonInString, getRequestQeueName()});
getChannel().basicPublish("", getRequestQeueName(), props, jsonInString.getBytes("UTF-8"));
final BlockingQueue<String> response = new ArrayBlockingQueue(1);
......@@ -122,9 +131,19 @@ public class DRIPCaller implements AutoCloseable {
}
}
});
String resp = response.take();
// String resp = response.take();
int timeOut = 25;
if (getRequestQeueName().equals("planner")) {
timeOut = 5;
}
if (getRequestQeueName().equals("provisioner")) {
timeOut = 10;
}
String resp = response.poll(timeOut, TimeUnit.MINUTES);
Logger.getLogger(DRIPCaller.class.getName()).log(Level.INFO, "Got: {0}", resp);
if (resp == null) {
throw new TimeoutException("Timeout on qeue: " + getRequestQeueName());
}
return mapper.readValue(resp, Message.class);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment