Search in sources :

Example 1 with SymphonyStreamHandler

use of org.finos.symphony.toolkit.stream.handler.SymphonyStreamHandler in project spring-bot by finos.

the class KoreAIBridgeFactoryImpl method buildBridge.

@Override
public SymphonyStreamHandler buildBridge(KoreAIInstanceProperties props) {
    String email = "--no email--";
    try {
        // build KoreAI pipeline
        ApiInstance apiInstance = symphonyAPIInstance(props);
        email = apiInstance.getIdentity().getEmail();
        KoreAIResponseBuilder koreAIResponseBuilder = koreAIResponseBuilder();
        KoreAIResponseHandler koreAIResponseHandler = responseMessageAdapter(apiInstance, props);
        KoreAIRequester requester = koreAIRequester(props, koreAIResponseHandler, koreAIResponseBuilder);
        List<StreamEventConsumer> consumers = new ArrayList<StreamEventConsumer>();
        consumers.add(koreAIEventHandler(requester, apiInstance, props));
        if (props.isSendWelcomeMessage()) {
            consumers.add(new RoomWelcomeEventConsumer(apiInstance.getAgentApi(MessagesApi.class), apiInstance.getPodApi(UsersApi.class), apiInstance.getIdentity(), props.getWelcomeMessageML()));
        }
        // wire this up to a shared stream
        SymphonyStreamHandler out = sshf.createBean(apiInstance, consumers);
        return out;
    } catch (Exception e) {
        LOG.error("Couldn't construct Kore/Symphony bridge bean for " + email, e);
        return null;
    }
}
Also used : SymphonyStreamHandler(org.finos.symphony.toolkit.stream.handler.SymphonyStreamHandler) KoreAIResponseBuilder(org.finos.symphony.toolkit.koreai.response.KoreAIResponseBuilder) RoomWelcomeEventConsumer(org.finos.symphony.toolkit.stream.welcome.RoomWelcomeEventConsumer) ArrayList(java.util.ArrayList) ApiInstance(org.finos.symphony.toolkit.spring.api.factories.ApiInstance) KoreAIResponseHandler(org.finos.symphony.toolkit.koreai.output.KoreAIResponseHandler) StreamEventConsumer(org.finos.symphony.toolkit.stream.StreamEventConsumer) KoreAIRequester(org.finos.symphony.toolkit.koreai.request.KoreAIRequester) IOException(java.io.IOException)

Example 2 with SymphonyStreamHandler

use of org.finos.symphony.toolkit.stream.handler.SymphonyStreamHandler in project spring-bot by finos.

the class SymphonyLeaderEventFilterIT method testMultipleStreamingConsumers.

@Test
public void testMultipleStreamingConsumers() throws InterruptedException {
    List<SimpleEventConsumer> consumers = IntStream.range(0, 4).mapToObj(i -> new Participant("p" + i)).map(p -> new SimpleEventConsumer(p)).collect(Collectors.toList());
    List<SymphonyStreamHandler> wrapped = consumers.stream().map(c -> {
        lmh = new SymphonyRoomSharedLog(clusterName, streamId, messagesApi, "UNIT", 6000);
        SymphonyStreamHandler out = new SymphonyStreamHandler(singleApi, c, ec, false);
        out.setFilter(new SymphonyLeaderEventFilter(c.p, lmh));
        out.start();
        return out;
    }).collect(Collectors.toList());
    // send some messsages through
    for (int j = 0; j < 8; j++) {
        createLeaderEvent(j % 4);
        for (int k = 0; k < 3; k++) {
            createMessageEvent(k);
        }
    }
    boolean done = false;
    while (!done) {
        Thread.sleep(2000);
        done = consumers.stream().map(c -> c.collection.size() == 6).reduce(true, (a, b) -> a && b);
    }
    wrapped.stream().forEach(c -> c.stop());
}
Also used : IntStream(java.util.stream.IntStream) SymphonyRoomSharedLog(org.finos.symphony.toolkit.stream.log.SymphonyRoomSharedLog) LogMessageType(org.finos.symphony.toolkit.stream.log.LogMessageType) SpringExtension(org.springframework.test.context.junit.jupiter.SpringExtension) LogMessage(org.finos.symphony.toolkit.stream.log.LogMessage) TestApplication(org.finos.symphony.toolkit.stream.fixture.TestApplication) Autowired(org.springframework.beans.factory.annotation.Autowired) ActiveProfiles(org.springframework.test.context.ActiveProfiles) Participant(org.finos.symphony.toolkit.stream.Participant) ApiInstance(org.finos.symphony.toolkit.spring.api.factories.ApiInstance) Collectors(java.util.stream.Collectors) ArrayList(java.util.ArrayList) SymphonyStreamHandler(org.finos.symphony.toolkit.stream.handler.SymphonyStreamHandler) Test(org.junit.jupiter.api.Test) MessagesApi(com.symphony.api.agent.MessagesApi) List(java.util.List) V4Event(com.symphony.api.model.V4Event) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) SpringBootTest(org.springframework.boot.test.context.SpringBootTest) ExceptionConsumer(org.finos.symphony.toolkit.stream.handler.ExceptionConsumer) StreamEventConsumer(org.finos.symphony.toolkit.stream.StreamEventConsumer) SymphonyLeaderEventFilter(org.finos.symphony.toolkit.stream.handler.SymphonyLeaderEventFilter) SymphonyStreamHandler(org.finos.symphony.toolkit.stream.handler.SymphonyStreamHandler) SymphonyLeaderEventFilter(org.finos.symphony.toolkit.stream.handler.SymphonyLeaderEventFilter) Participant(org.finos.symphony.toolkit.stream.Participant) SymphonyRoomSharedLog(org.finos.symphony.toolkit.stream.log.SymphonyRoomSharedLog) Test(org.junit.jupiter.api.Test) SpringBootTest(org.springframework.boot.test.context.SpringBootTest)

Example 3 with SymphonyStreamHandler

use of org.finos.symphony.toolkit.stream.handler.SymphonyStreamHandler in project spring-bot by finos.

the class SharedStreamSingleBotConfig method singleSymphonyStreamHandler.

@Bean(name = "SingleSymphonyStreamHandler")
public SymphonyStreamHandler singleSymphonyStreamHandler(List<ApiInstance> symphonyApis, List<StreamEventConsumer> consumers) throws Exception {
    LOG.debug("StreamEventConsumers: " + (consumers == null ? 0 : consumers.size()));
    LOG.debug("SymphonyAPIs: " + (symphonyApis == null ? 0 : symphonyApis.size()));
    if ((hasAtLeastOne(consumers)) && (hasOne(symphonyApis))) {
        SymphonyStreamHandler ssh = streamHandlerFactory.createBean(symphonyApis.get(0), consumers);
        return ssh;
    } else {
        LOG.debug("Not initializing SharedStreamSingleBotConfig (needs to be one of each)");
        return null;
    }
}
Also used : SymphonyStreamHandler(org.finos.symphony.toolkit.stream.handler.SymphonyStreamHandler) ConditionalOnBean(org.springframework.boot.autoconfigure.condition.ConditionalOnBean) ConditionalOnMissingBean(org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean) Bean(org.springframework.context.annotation.Bean)

Aggregations

SymphonyStreamHandler (org.finos.symphony.toolkit.stream.handler.SymphonyStreamHandler)3 ArrayList (java.util.ArrayList)2 ApiInstance (org.finos.symphony.toolkit.spring.api.factories.ApiInstance)2 StreamEventConsumer (org.finos.symphony.toolkit.stream.StreamEventConsumer)2 MessagesApi (com.symphony.api.agent.MessagesApi)1 V4Event (com.symphony.api.model.V4Event)1 IOException (java.io.IOException)1 List (java.util.List)1 Collectors (java.util.stream.Collectors)1 IntStream (java.util.stream.IntStream)1 KoreAIResponseHandler (org.finos.symphony.toolkit.koreai.output.KoreAIResponseHandler)1 KoreAIRequester (org.finos.symphony.toolkit.koreai.request.KoreAIRequester)1 KoreAIResponseBuilder (org.finos.symphony.toolkit.koreai.response.KoreAIResponseBuilder)1 Participant (org.finos.symphony.toolkit.stream.Participant)1 TestApplication (org.finos.symphony.toolkit.stream.fixture.TestApplication)1 ExceptionConsumer (org.finos.symphony.toolkit.stream.handler.ExceptionConsumer)1 SymphonyLeaderEventFilter (org.finos.symphony.toolkit.stream.handler.SymphonyLeaderEventFilter)1 LogMessage (org.finos.symphony.toolkit.stream.log.LogMessage)1 LogMessageType (org.finos.symphony.toolkit.stream.log.LogMessageType)1 SymphonyRoomSharedLog (org.finos.symphony.toolkit.stream.log.SymphonyRoomSharedLog)1