Skip to content

Commit b9b8d5b

Browse files
Merge pull request #132 from InseeFr/devRundeckApi
Dev rundeck api
2 parents ff403ca + 66db1e4 commit b9b8d5b

File tree

17 files changed

+459
-0
lines changed

17 files changed

+459
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package fr.insee.genesis.controller.rest;
2+
3+
import fr.insee.genesis.domain.model.rundeck.RundeckExecution;
4+
import fr.insee.genesis.domain.ports.api.RundeckExecutionApiPort;
5+
import io.swagger.v3.oas.annotations.Operation;
6+
import io.swagger.v3.oas.annotations.Parameter;
7+
import lombok.extern.slf4j.Slf4j;
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.http.ResponseEntity;
10+
import org.springframework.stereotype.Controller;
11+
import org.springframework.web.bind.annotation.PostMapping;
12+
import org.springframework.web.bind.annotation.RequestBody;
13+
import org.springframework.web.bind.annotation.RequestMapping;
14+
15+
@RequestMapping(path = "/rundeck-execution")
16+
@Controller
17+
@Slf4j
18+
public class RundeckExecutionController {
19+
20+
private final RundeckExecutionApiPort rundeckExecutionApiPort;
21+
22+
@Autowired
23+
public RundeckExecutionController(RundeckExecutionApiPort rundeckExecutionApiPort) {
24+
this.rundeckExecutionApiPort = rundeckExecutionApiPort;
25+
}
26+
27+
@Operation(summary = "Register a Rundeck execution")
28+
@PostMapping(path = "/save")
29+
public ResponseEntity<Object> addRundeckExecution(
30+
@Parameter(description = "JSON response from Rundeck API /run endpoint") @RequestBody RundeckExecution rundeckExecution
31+
){
32+
try{
33+
rundeckExecutionApiPort.addExecution(rundeckExecution);
34+
log.info("{} job saved", rundeckExecution.getJob().getName());
35+
} catch(Exception e){
36+
log.info("Rundeck execution was not saved in database");
37+
return ResponseEntity.internalServerError().build();
38+
}
39+
return ResponseEntity.ok().build();
40+
}
41+
42+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package fr.insee.genesis.domain.model.rundeck;
2+
3+
import lombok.Getter;
4+
import lombok.Setter;
5+
6+
@Getter
7+
@Setter
8+
public class DateStarted {
9+
10+
private long unixtime;
11+
private String date;
12+
13+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package fr.insee.genesis.domain.model.rundeck;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import lombok.Getter;
5+
import lombok.Setter;
6+
7+
@Getter
8+
@Setter
9+
public class Job {
10+
11+
@JsonProperty("id")
12+
private String idJob;
13+
private long averageDuration;
14+
private String name;
15+
private String group;
16+
private String project;
17+
private String description;
18+
private String href;
19+
private String permalink;
20+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package fr.insee.genesis.domain.model.rundeck;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import lombok.Getter;
5+
import lombok.Setter;
6+
7+
@Getter
8+
@Setter
9+
public class RundeckExecution {
10+
11+
@JsonProperty("id")
12+
private long idExecution;
13+
private String href;
14+
private String permalink;
15+
private String status;
16+
private String project;
17+
private String executionType;
18+
private String user;
19+
20+
@JsonProperty("date-started")
21+
private DateStarted dateStarted;
22+
23+
private Job job;
24+
private String description;
25+
private String argstring;
26+
private String serverUUID;
27+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package fr.insee.genesis.domain.ports.api;
2+
3+
import fr.insee.genesis.domain.model.rundeck.RundeckExecution;
4+
5+
public interface RundeckExecutionApiPort {
6+
7+
void addExecution(RundeckExecution rundeckExecution);
8+
9+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package fr.insee.genesis.domain.ports.spi;
2+
3+
import fr.insee.genesis.domain.model.rundeck.RundeckExecution;
4+
5+
public interface RundeckExecutionPersistencePort {
6+
7+
void save(RundeckExecution rundeckExecution);
8+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package fr.insee.genesis.domain.service.rundeck;
2+
3+
import fr.insee.genesis.domain.model.rundeck.RundeckExecution;
4+
import fr.insee.genesis.domain.ports.api.RundeckExecutionApiPort;
5+
import fr.insee.genesis.domain.ports.spi.RundeckExecutionPersistencePort;
6+
import lombok.extern.slf4j.Slf4j;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.beans.factory.annotation.Qualifier;
9+
import org.springframework.stereotype.Service;
10+
11+
@Service
12+
@Slf4j
13+
public class RundeckExecutionService implements RundeckExecutionApiPort {
14+
@Qualifier("rundeckExecutionMongoAdapter")
15+
private final RundeckExecutionPersistencePort rundeckExecutionPersistencePort;
16+
17+
@Autowired
18+
public RundeckExecutionService(RundeckExecutionPersistencePort rundeckExecutionPersistencePort) {
19+
this.rundeckExecutionPersistencePort = rundeckExecutionPersistencePort;
20+
}
21+
22+
@Override
23+
public void addExecution(RundeckExecution rundeckExecution) {
24+
rundeckExecutionPersistencePort.save(rundeckExecution);
25+
}
26+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package fr.insee.genesis.infrastructure.adapter;
2+
3+
import fr.insee.genesis.domain.model.rundeck.RundeckExecution;
4+
import fr.insee.genesis.domain.ports.spi.RundeckExecutionPersistencePort;
5+
import fr.insee.genesis.infrastructure.mappers.RundeckExecutionDocumentMapper;
6+
import fr.insee.genesis.infrastructure.repository.RundeckExecutionDBRepository;
7+
import fr.insee.genesis.infrastructure.repository.ScheduleMongoDBRepository;
8+
import lombok.extern.slf4j.Slf4j;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.beans.factory.annotation.Qualifier;
11+
import org.springframework.data.mongodb.core.MongoTemplate;
12+
import org.springframework.stereotype.Service;
13+
14+
@Service
15+
@Qualifier("rundeckExecutionMongoAdapter")
16+
@Slf4j
17+
public class RundeckExecutionMongoAdapter implements RundeckExecutionPersistencePort {
18+
19+
private final RundeckExecutionDBRepository rundeckExecutionDBRepository;
20+
21+
@Autowired
22+
public RundeckExecutionMongoAdapter(RundeckExecutionDBRepository rundeckExecutionDBRepository) {
23+
this.rundeckExecutionDBRepository = rundeckExecutionDBRepository;
24+
}
25+
26+
@Override
27+
public void save(RundeckExecution rundeckExecution) {
28+
rundeckExecutionDBRepository.insert(RundeckExecutionDocumentMapper.INSTANCE.modelToDocument(rundeckExecution));
29+
}
30+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package fr.insee.genesis.infrastructure.document.rundeck;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class Job {
7+
8+
private String idJob;
9+
private long averageDuration;
10+
private String name;
11+
private String project;
12+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package fr.insee.genesis.infrastructure.document.rundeck;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import fr.insee.genesis.domain.model.rundeck.DateStarted;
5+
import lombok.*;
6+
import org.springframework.data.mongodb.core.mapping.Document;
7+
8+
@Data
9+
@NoArgsConstructor
10+
@AllArgsConstructor
11+
@Document(collection= "rundeckExecutions")
12+
public class RundeckExecutionDocument {
13+
14+
private long idExecution;
15+
private String status;
16+
private String project;
17+
private String user;
18+
19+
@JsonProperty("date-started")
20+
private DateStarted dateStarted;
21+
22+
private Job job;
23+
}

0 commit comments

Comments
 (0)