diff --git a/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/pom.xml b/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/pom.xml
index dc5b6b82500..18fc2c15717 100644
--- a/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/pom.xml
+++ b/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/pom.xml
@@ -35,6 +35,11 @@
identity-manager-api
+
+ ${project.groupId}
+ hub-manager-api
+
+
com.nimbusds
nimbus-jose-jwt
diff --git a/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/src/main/java/io/subutai/core/environment/metadata/impl/BrokerSettingException.java b/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/src/main/java/io/subutai/core/environment/metadata/impl/BrokerSettingException.java
new file mode 100644
index 00000000000..441a0591cd7
--- /dev/null
+++ b/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/src/main/java/io/subutai/core/environment/metadata/impl/BrokerSettingException.java
@@ -0,0 +1,17 @@
+package io.subutai.core.environment.metadata.impl;
+
+
+public class BrokerSettingException extends Exception
+{
+
+ public BrokerSettingException( final String message )
+ {
+ super( message );
+ }
+
+
+ public BrokerSettingException( final Exception e )
+ {
+ super( e );
+ }
+}
diff --git a/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/src/main/java/io/subutai/core/environment/metadata/impl/EnvironmentMetadataManagerImpl.java b/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/src/main/java/io/subutai/core/environment/metadata/impl/EnvironmentMetadataManagerImpl.java
index b5934d37a89..dd6794f15c2 100644
--- a/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/src/main/java/io/subutai/core/environment/metadata/impl/EnvironmentMetadataManagerImpl.java
+++ b/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/src/main/java/io/subutai/core/environment/metadata/impl/EnvironmentMetadataManagerImpl.java
@@ -1,6 +1,12 @@
package io.subutai.core.environment.metadata.impl;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -13,10 +19,12 @@
import io.subutai.common.peer.HostNotFoundException;
import io.subutai.core.environment.api.EnvironmentManager;
import io.subutai.core.environment.metadata.api.EnvironmentMetadataManager;
+import io.subutai.core.hubmanager.api.HubManager;
import io.subutai.core.identity.api.IdentityManager;
import io.subutai.core.identity.api.exception.TokenCreateException;
import io.subutai.core.peer.api.PeerManager;
import io.subutai.hub.share.Utils;
+import io.subutai.hub.share.dto.BrokerSettingsDto;
import io.subutai.hub.share.dto.environment.EnvironmentInfoDto;
import io.subutai.hub.share.event.Event;
import io.subutai.hub.share.json.JsonUtil;
@@ -31,16 +39,17 @@ public class EnvironmentMetadataManagerImpl implements EnvironmentMetadataManage
private final IdentityManager identityManager;
private PeerManager peerManager;
private EnvironmentManager environmentManager;
- private String brokerURL;
+ private BrokerSettings brokerSettings;
+ private HubManager hubManager;
public EnvironmentMetadataManagerImpl( PeerManager peerManager, EnvironmentManager environmentManager,
- IdentityManager identityManager, final String brokerURL )
+ IdentityManager identityManager, HubManager hubManager )
{
this.peerManager = peerManager;
this.environmentManager = environmentManager;
this.identityManager = identityManager;
- this.brokerURL = brokerURL;
+ this.hubManager = hubManager;
}
@@ -96,18 +105,57 @@ public void pushEvent( final Event event )
String jsonEvent = JsonUtil.toJson( event );
LOG.debug( "Event received: {} {}", event, jsonEvent );
LOG.debug( "OS: {}", event.getCustomMetaByKey( "OS" ) );
- LOG.debug( "Nature: {}", event.getPayload().getNature() );
String destination = "events." + event.getOrigin().getId();
- thread( new EventProducer( brokerURL, destination, jsonEvent ), true );
+ checkBrokerSettings( false );
+ // TODO: 4/12/18 need to implement connections pool something like below; while creating connection
+ // every time with random URI
+ // ActiveMQConnectionFactory amq = new ActiveMQConnectionFactory(
+ // "vm://broker1?marshal=false&broker.persistent=false&broker.useJmx=false");
+ // JmsPoolConnectionFactory cf = new JmsPoolConnectionFactory();
+ // cf.setConnectionFactory(amq);
+ // cf.setMaxConnections(3);
+ thread( new EventProducer( this.brokerSettings.getBroker(), destination, jsonEvent ), true );
}
- catch ( JsonProcessingException e )
+ catch ( JsonProcessingException | URISyntaxException | BrokerSettingException e )
{
LOG.error( e.getMessage(), e );
}
}
+ private void checkBrokerSettings( boolean retrieve ) throws BrokerSettingException
+ {
+ if ( !( brokerSettings == null || retrieve ) )
+ {
+ return;
+ }
+
+ try
+ {
+ final BrokerSettingsDto response = hubManager.getBrokers();
+ if ( response == null )
+ {
+ throw new BrokerSettingException( "Could not retrieve broker settings." );
+ }
+ List list = new ArrayList<>();
+ for ( String s : response.getBrokers() )
+ {
+ list.add( new URI( s ) );
+ }
+ if ( list.size() == 0 )
+ {
+ throw new BrokerSettingException( "Broker URI list is empty." );
+ }
+ this.brokerSettings = new BrokerSettings( list );
+ }
+ catch ( URISyntaxException e )
+ {
+ throw new BrokerSettingException( e );
+ }
+ }
+
+
private void thread( Runnable runnable, boolean daemon )
{
Thread brokerThread = new Thread( runnable );
@@ -121,5 +169,23 @@ private void placeTokenIntoContainer( ContainerHost containerHost, String token
containerHost.executeAsync( new RequestBuilder(
String.format( "mkdir -p /etc/subutai/ ; echo '%s' > /etc/subutai/jwttoken", token ) ) );
}
+
+
+ private class BrokerSettings
+ {
+ List uriList;
+
+
+ public BrokerSettings( final List uriList )
+ {
+ this.uriList = uriList;
+ }
+
+
+ public URI getBroker()
+ {
+ return uriList.get( new Random().nextInt( uriList.size() ) );
+ }
+ }
}
diff --git a/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/src/main/java/io/subutai/core/environment/metadata/impl/EventProducer.java b/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/src/main/java/io/subutai/core/environment/metadata/impl/EventProducer.java
index b8bf25463b9..106123b8a78 100644
--- a/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/src/main/java/io/subutai/core/environment/metadata/impl/EventProducer.java
+++ b/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/src/main/java/io/subutai/core/environment/metadata/impl/EventProducer.java
@@ -1,6 +1,9 @@
package io.subutai.core.environment.metadata.impl;
+import java.net.URI;
+import java.net.URISyntaxException;
+
import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
@@ -21,17 +24,17 @@ public class EventProducer implements Runnable
private final String destination;
private String message;
- private String brokerURL;
+ private URI uri;
private ActiveMQConnectionFactory connectionFactory;
- public EventProducer( final String brokerURL, final String destination, final String message )
+ public EventProducer( final URI uri, final String destination, final String message ) throws URISyntaxException
{
- this.brokerURL = brokerURL;
+ this.uri = uri;
this.destination = destination;
this.message = message;
// Create a ConnectionFactory
- connectionFactory = new ActiveMQConnectionFactory( this.brokerURL );
+ connectionFactory = new ActiveMQConnectionFactory( uri );
}
diff --git a/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/src/main/resources/OSGI-INF/blueprint/context.xml b/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/src/main/resources/OSGI-INF/blueprint/context.xml
index 29ecaf97433..a2b38e69572 100644
--- a/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/src/main/resources/OSGI-INF/blueprint/context.xml
+++ b/management/server/core/environment-metadata-manager/environment-metadata-manager-impl/src/main/resources/OSGI-INF/blueprint/context.xml
@@ -16,12 +16,15 @@
+
+
-
+
response =
+ client.get( "/rest/v1/brokers/" + localPeer.getId(), BrokerSettingsDto.class );
+
+ return response.getEntity();
+ }
}
\ No newline at end of file
diff --git a/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/dto/BrokerSettingsDto.java b/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/dto/BrokerSettingsDto.java
new file mode 100644
index 00000000000..a339f7e2503
--- /dev/null
+++ b/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/dto/BrokerSettingsDto.java
@@ -0,0 +1,27 @@
+package io.subutai.hub.share.dto;
+
+
+import java.util.List;
+
+
+public class BrokerSettingsDto
+{
+ private List brokers;
+
+
+ public BrokerSettingsDto( final List brokers )
+ {
+ this.brokers = brokers;
+ }
+
+
+ public BrokerSettingsDto()
+ {
+ }
+
+
+ public List getBrokers()
+ {
+ return brokers;
+ }
+}
diff --git a/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/meta/Meta.java b/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/meta/Meta.java
index d5a7e8295d0..624d9e78f3e 100644
--- a/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/meta/Meta.java
+++ b/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/meta/Meta.java
@@ -1,7 +1,6 @@
package io.subutai.hub.share.event.meta;
-import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
@@ -13,8 +12,6 @@
@JsonSubTypes.Type( value = SourceMeta.class, name = "source" ),
@JsonSubTypes.Type( value = OriginMeta.class, name = "origin" )
} )
-@JsonAutoDetect( fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE,
- setterVisibility = JsonAutoDetect.Visibility.NONE )
public interface Meta
{
}
diff --git a/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/meta/OriginMeta.java b/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/meta/OriginMeta.java
index f269341132f..29363e0f57f 100644
--- a/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/meta/OriginMeta.java
+++ b/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/meta/OriginMeta.java
@@ -1,12 +1,16 @@
package io.subutai.hub.share.event.meta;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Preconditions;
import io.subutai.hub.share.Utils;
+@JsonAutoDetect( fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE,
+ setterVisibility = JsonAutoDetect.Visibility.NONE )
+
public class OriginMeta implements Meta
{
@JsonProperty
diff --git a/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/payload/CustomPayload.java b/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/payload/CustomPayload.java
index 1e7b889b69e..6e7a4c89bf0 100644
--- a/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/payload/CustomPayload.java
+++ b/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/payload/CustomPayload.java
@@ -21,13 +21,6 @@ public CustomPayload( final String message )
}
- @Override
- public Nature getNature()
- {
- return Nature.CUSTOM;
- }
-
-
public String getMessage()
{
return message;
diff --git a/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/payload/LogPayload.java b/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/payload/LogPayload.java
index f0ac031cdb2..dc8d574ec18 100644
--- a/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/payload/LogPayload.java
+++ b/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/payload/LogPayload.java
@@ -37,13 +37,6 @@ public LogPayload( final String source, final String message, final Level level
}
- @Override
- public Nature getNature()
- {
- return Nature.LOG;
- }
-
-
public String getSource()
{
return source;
diff --git a/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/payload/Payload.java b/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/payload/Payload.java
index d7b0e94192d..f057e5aed45 100644
--- a/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/payload/Payload.java
+++ b/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/payload/Payload.java
@@ -20,7 +20,4 @@ public enum Nature
{
CUSTOM, LOG, PROGRESS
}
-
-
- public abstract Nature getNature();
}
diff --git a/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/payload/ProgressPayload.java b/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/payload/ProgressPayload.java
index ec83e67382f..96ef3a1a471 100644
--- a/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/payload/ProgressPayload.java
+++ b/management/server/subutai-hub-share/src/main/java/io/subutai/hub/share/event/payload/ProgressPayload.java
@@ -31,13 +31,6 @@ private ProgressPayload()
}
- @Override
- public Nature getNature()
- {
- return Nature.PROGRESS;
- }
-
-
public String getStep()
{
return step;
diff --git a/management/server/subutai-hub-share/src/test/java/io/subutai/hub/share/event/EventMessageTest.java b/management/server/subutai-hub-share/src/test/java/io/subutai/hub/share/event/EventMessageTest.java
index eeb980c716d..c44e06c7bc8 100644
--- a/management/server/subutai-hub-share/src/test/java/io/subutai/hub/share/event/EventMessageTest.java
+++ b/management/server/subutai-hub-share/src/test/java/io/subutai/hub/share/event/EventMessageTest.java
@@ -38,7 +38,7 @@ public void setup()
logPayload = new LogPayload("source", "initiated", LogPayload.Level.INFO);
- origin = new OriginMeta( "subutaiPeer:subutaiContainer:subutaiEnvironment" );
+ origin = new OriginMeta( "subutaiPeer.subutaiContainer.subutaiEnvironment" );
source = new SourceMeta( "cassandra-blueprint", SourceMeta.Type.BLUEPRINT );
}