Search in sources :

Example 6 with Event

use of io.gravitee.repository.management.model.Event in project gravitee-gateway by gravitee-io.

the class SyncManagerTest method test_shouldUpdateIfLastEventIsStartAPI.

@Test
public void test_shouldUpdateIfLastEventIsStartAPI() throws Exception {
    io.gravitee.repository.management.model.Api api = new RepositoryApiBuilder().id("api-test").updatedAt(new Date()).definition("test").lifecycleState(LifecycleState.STOPPED).build();
    Instant updateDateInst = api.getUpdatedAt().toInstant().plus(Duration.ofHours(1));
    io.gravitee.repository.management.model.Api api2 = new RepositoryApiBuilder().id("api-test").updatedAt(Date.from(updateDateInst)).definition("test").lifecycleState(LifecycleState.STARTED).build();
    final Api mockApi = mockApi(api);
    mockApi(api2);
    final Event mockEvent = mockEvent(api, EventType.PUBLISH_API);
    final Event mockEvent2 = mockEvent(api2, EventType.START_API);
    List<Event> events = new ArrayList<Event>();
    events.add(mockEvent);
    events.add(mockEvent2);
    when(eventRepository.search(any(EventCriteria.class), any(Pageable.class))).thenReturn(new Page<>(Collections.singletonList(mockEvent), 0, 0, 1));
    when(apiRepository.findAll()).thenReturn(Collections.singleton(api));
    syncManager.refresh();
    when(eventRepository.search(any(EventCriteria.class), any(Pageable.class))).thenReturn(new Page<>(events, 0, 0, 2));
    when(apiRepository.findAll()).thenReturn(Collections.singleton(api2));
    when(apiManager.get(api.getId())).thenReturn(mockApi);
    syncManager.refresh();
    verify(apiManager).deploy(mockApi);
    verify(apiManager).update(mockApi);
    verify(apiManager, never()).undeploy(any(String.class));
}
Also used : Instant(java.time.Instant) RepositoryApiBuilder(io.gravitee.gateway.services.sync.builder.RepositoryApiBuilder) EventCriteria(io.gravitee.repository.management.api.search.EventCriteria) Pageable(io.gravitee.repository.management.api.search.Pageable) Event(io.gravitee.repository.management.model.Event) Api(io.gravitee.gateway.handlers.api.definition.Api) Test(org.junit.Test)

Example 7 with Event

use of io.gravitee.repository.management.model.Event in project gravitee-gateway by gravitee-io.

the class SyncManagerTest method test_twiceWithTwoApis_apiToUpdate.

@Test
public void test_twiceWithTwoApis_apiToUpdate() throws Exception {
    io.gravitee.repository.management.model.Api api = new RepositoryApiBuilder().id("api-test").updatedAt(new Date()).definition("test").build();
    Instant updateDateInst = api.getUpdatedAt().toInstant().plus(Duration.ofHours(1));
    io.gravitee.repository.management.model.Api api2 = new RepositoryApiBuilder().id("api-test").updatedAt(Date.from(updateDateInst)).definition("test2").build();
    final Api mockApi = mockApi(api);
    mockApi(api2);
    final Event mockEvent = mockEvent(api, EventType.PUBLISH_API);
    final Event mockEvent2 = mockEvent(api2, EventType.PUBLISH_API);
    List<Event> events = new ArrayList<Event>();
    events.add(mockEvent);
    events.add(mockEvent2);
    when(eventRepository.search(any(EventCriteria.class), any(Pageable.class))).thenReturn(new Page<>(events, 0, 0, 1));
    when(apiRepository.findAll()).thenReturn(Collections.singleton(api));
    syncManager.refresh();
    when(apiRepository.findAll()).thenReturn(Collections.singleton(api2));
    when(apiManager.get(api.getId())).thenReturn(mockApi);
    syncManager.refresh();
    verify(apiManager).deploy(mockApi);
    verify(apiManager).update(mockApi);
    verify(apiManager, never()).undeploy(any(String.class));
}
Also used : Instant(java.time.Instant) RepositoryApiBuilder(io.gravitee.gateway.services.sync.builder.RepositoryApiBuilder) EventCriteria(io.gravitee.repository.management.api.search.EventCriteria) Pageable(io.gravitee.repository.management.api.search.Pageable) Event(io.gravitee.repository.management.model.Event) Api(io.gravitee.gateway.handlers.api.definition.Api) Test(org.junit.Test)

Example 8 with Event

use of io.gravitee.repository.management.model.Event in project gravitee-gateway by gravitee-io.

the class SyncManagerTest method test_twiceWithTwoApis.

@Test
public void test_twiceWithTwoApis() throws Exception {
    io.gravitee.repository.management.model.Api api = new RepositoryApiBuilder().id("api-test").updatedAt(new Date()).definition("test").build();
    final Api mockApi = mockApi(api);
    final Event mockEvent = mockEvent(api, EventType.PUBLISH_API);
    when(eventRepository.search(any(EventCriteria.class), any(Pageable.class))).thenReturn(new Page<>(Collections.singletonList(mockEvent), 0, 0, 1));
    when(apiRepository.findAll()).thenReturn(Collections.singleton(api));
    syncManager.refresh();
    io.gravitee.repository.management.model.Api api2 = new RepositoryApiBuilder().id("api-test-2").updatedAt(new Date()).definition("test2").build();
    final Api mockApi2 = mockApi(api2);
    final Event mockEvent2 = mockEvent(api2, EventType.PUBLISH_API);
    Set<io.gravitee.repository.management.model.Api> apis = new HashSet<>();
    apis.add(api);
    apis.add(api2);
    List<Event> events = new ArrayList<>();
    events.add(mockEvent);
    events.add(mockEvent2);
    when(eventRepository.search(any(EventCriteria.class), any(Pageable.class))).thenReturn(new Page<>(events, 0, 0, 1), new Page<>(Collections.emptyList(), 0, 0, 1));
    when(apiRepository.findAll()).thenReturn(apis);
    syncManager.refresh();
    verify(apiManager, times(2)).deploy(argThat(new ArgumentMatcher<Api>() {

        @Override
        public boolean matches(Object argument) {
            final Api api = (Api) argument;
            return api.getId().equals(mockApi.getId()) || api2.getId().equals(mockApi2.getId());
        }
    }));
    verify(apiManager, never()).update(any(Api.class));
    verify(apiManager, never()).undeploy(any(String.class));
}
Also used : RepositoryApiBuilder(io.gravitee.gateway.services.sync.builder.RepositoryApiBuilder) EventCriteria(io.gravitee.repository.management.api.search.EventCriteria) Pageable(io.gravitee.repository.management.api.search.Pageable) ArgumentMatcher(org.mockito.ArgumentMatcher) Event(io.gravitee.repository.management.model.Event) Api(io.gravitee.gateway.handlers.api.definition.Api) Test(org.junit.Test)

Example 9 with Event

use of io.gravitee.repository.management.model.Event in project gravitee-gateway by gravitee-io.

the class SyncManagerTest method test_not_deployApiWithTagExclusion.

@Test
public void test_not_deployApiWithTagExclusion() throws Exception {
    io.gravitee.repository.management.model.Api api = new RepositoryApiBuilder().id("api-test").updatedAt(new Date()).definition("test").build();
    final Api mockApi = mockApi(api);
    mockApi.setTags(new HashSet<>(Arrays.asList(new String[] { "test" })));
    when(gatewayConfiguration.shardingTags()).thenReturn(Optional.of(Collections.singletonList("!test")));
    when(apiRepository.findAll()).thenReturn(Collections.singleton(api));
    final Event mockEvent = mockEvent(api, EventType.PUBLISH_API);
    when(eventRepository.search(any(EventCriteria.class), any(Pageable.class))).thenReturn(new Page<>(Collections.singletonList(mockEvent), 0, 0, 1));
    syncManager.refresh();
    verify(apiManager, never()).deploy(mockApi);
    verify(apiManager, never()).update(any(Api.class));
}
Also used : Pageable(io.gravitee.repository.management.api.search.Pageable) Event(io.gravitee.repository.management.model.Event) RepositoryApiBuilder(io.gravitee.gateway.services.sync.builder.RepositoryApiBuilder) Api(io.gravitee.gateway.handlers.api.definition.Api) EventCriteria(io.gravitee.repository.management.api.search.EventCriteria) Test(org.junit.Test)

Example 10 with Event

use of io.gravitee.repository.management.model.Event in project gravitee-management-rest-api by gravitee-io.

the class SyncManager method refresh.

public void refresh() {
    logger.debug("Refreshing state...");
    try {
        // Extract all registered APIs
        Map<String, io.gravitee.repository.management.model.Api> apis = apiRepository.findAll().stream().collect(Collectors.toMap(io.gravitee.repository.management.model.Api::getId, api -> api));
        // Get last event for each API
        Map<String, Event> events = new HashMap<>();
        apis.keySet().forEach(api -> {
            Event event = getLastEvent(api);
            events.put(api, event);
        });
        // Determine API which must be stopped and stop them
        events.entrySet().stream().filter(apiEvent -> {
            Event event = apiEvent.getValue();
            return event != null && (event.getType() == EventType.STOP_API || event.getType() == EventType.UNPUBLISH_API);
        }).forEach(apiEvent -> apiManager.undeploy(apiEvent.getKey()));
        // Determine API which must be deployed
        events.entrySet().stream().filter(apiEvent -> {
            Event event = apiEvent.getValue();
            return event != null && (event.getType() == EventType.START_API || event.getType() == EventType.PUBLISH_API);
        }).forEach(apiEvent -> {
            try {
                // Read API definition from event
                io.gravitee.repository.management.model.Api payloadApi = objectMapper.readValue(apiEvent.getValue().getPayload(), io.gravitee.repository.management.model.Api.class);
                // API to deploy
                ApiEntity apiToDeploy = convert(payloadApi);
                if (apiToDeploy != null) {
                    // Get deployed API
                    ApiEntity deployedApi = apiManager.get(apiToDeploy.getId());
                    // API is not yet deployed, so let's do it !
                    if (deployedApi == null) {
                        apiManager.deploy(apiToDeploy);
                    } else {
                        if (deployedApi.getDeployedAt().before(apiToDeploy.getDeployedAt())) {
                            apiManager.update(apiToDeploy);
                        }
                    }
                }
            } catch (IOException ioe) {
                logger.error("Error while determining deployed APIs store into events payload", ioe);
            }
        });
        lastRefreshAt = System.currentTimeMillis();
    } catch (TechnicalException te) {
        logger.error("Unable to sync instance", te);
    }
}
Also used : EventRepository(io.gravitee.repository.management.api.EventRepository) Logger(org.slf4j.Logger) Event(io.gravitee.repository.management.model.Event) ApiEntity(io.gravitee.management.model.ApiEntity) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) TechnicalException(io.gravitee.repository.exceptions.TechnicalException) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) EventCriteria(io.gravitee.repository.management.api.search.EventCriteria) IOException(java.io.IOException) HashMap(java.util.HashMap) Collectors(java.util.stream.Collectors) LifecycleState(io.gravitee.repository.management.model.LifecycleState) List(java.util.List) Api(io.gravitee.repository.management.model.Api) EventType(io.gravitee.repository.management.model.EventType) ApiRepository(io.gravitee.repository.management.api.ApiRepository) PageableBuilder(io.gravitee.repository.management.api.search.builder.PageableBuilder) Map(java.util.Map) Lifecycle(io.gravitee.common.component.Lifecycle) TechnicalException(io.gravitee.repository.exceptions.TechnicalException) HashMap(java.util.HashMap) ApiEntity(io.gravitee.management.model.ApiEntity) IOException(java.io.IOException) Api(io.gravitee.repository.management.model.Api) Event(io.gravitee.repository.management.model.Event) Api(io.gravitee.repository.management.model.Api)

Aggregations

Event (io.gravitee.repository.management.model.Event)25 EventCriteria (io.gravitee.repository.management.api.search.EventCriteria)19 Api (io.gravitee.gateway.handlers.api.definition.Api)16 RepositoryApiBuilder (io.gravitee.gateway.services.sync.builder.RepositoryApiBuilder)15 Pageable (io.gravitee.repository.management.api.search.Pageable)14 Test (org.junit.Test)14 TechnicalException (io.gravitee.repository.exceptions.TechnicalException)4 PageableBuilder (io.gravitee.repository.management.api.search.builder.PageableBuilder)4 Instant (java.time.Instant)4 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)3 EventRepository (io.gravitee.repository.management.api.EventRepository)3 EventType (io.gravitee.repository.management.model.EventType)3 Collectors (java.util.stream.Collectors)3 ArgumentMatcher (org.mockito.ArgumentMatcher)3 Logger (org.slf4j.Logger)3 LoggerFactory (org.slf4j.LoggerFactory)3 Autowired (org.springframework.beans.factory.annotation.Autowired)3 JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)2 GatewayConfiguration (io.gravitee.gateway.env.GatewayConfiguration)2 InstanceEventPayload (io.gravitee.gateway.services.monitoring.event.InstanceEventPayload)2