(cobra client) can subscribe with a position
This commit is contained in:
		@@ -1,6 +1,10 @@
 | 
				
			|||||||
# Changelog
 | 
					# Changelog
 | 
				
			||||||
All changes to this project will be documented in this file.
 | 
					All changes to this project will be documented in this file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## [8.2.4] - 2020-03-13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(cobra client) can subscribe with a position
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## [8.2.3] - 2020-03-13
 | 
					## [8.2.3] - 2020-03-13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(cobra client) pass the message position to the subscription data callback
 | 
					(cobra client) pass the message position to the subscription data callback
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@ namespace ix
 | 
				
			|||||||
    int cobra_to_sentry_bot(const CobraConfig& config,
 | 
					    int cobra_to_sentry_bot(const CobraConfig& config,
 | 
				
			||||||
                            const std::string& channel,
 | 
					                            const std::string& channel,
 | 
				
			||||||
                            const std::string& filter,
 | 
					                            const std::string& filter,
 | 
				
			||||||
 | 
					                            const std::string& position,
 | 
				
			||||||
                            SentryClient& sentryClient,
 | 
					                            SentryClient& sentryClient,
 | 
				
			||||||
                            bool verbose,
 | 
					                            bool verbose,
 | 
				
			||||||
                            bool strict,
 | 
					                            bool strict,
 | 
				
			||||||
@@ -37,7 +38,7 @@ namespace ix
 | 
				
			|||||||
        std::atomic<bool> stop(false);
 | 
					        std::atomic<bool> stop(false);
 | 
				
			||||||
        std::atomic<bool> throttled(false);
 | 
					        std::atomic<bool> throttled(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        QueueManager queueManager(maxQueueSize, stop);
 | 
					        QueueManager queueManager(maxQueueSize);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        auto timer = [&sentCount, &receivedCount, &stop] {
 | 
					        auto timer = [&sentCount, &receivedCount, &stop] {
 | 
				
			||||||
            while (!stop)
 | 
					            while (!stop)
 | 
				
			||||||
@@ -173,6 +174,7 @@ namespace ix
 | 
				
			|||||||
        conn.setEventCallback([&conn,
 | 
					        conn.setEventCallback([&conn,
 | 
				
			||||||
                               &channel,
 | 
					                               &channel,
 | 
				
			||||||
                               &filter,
 | 
					                               &filter,
 | 
				
			||||||
 | 
					                               &position,
 | 
				
			||||||
                               &jsonWriter,
 | 
					                               &jsonWriter,
 | 
				
			||||||
                               verbose,
 | 
					                               verbose,
 | 
				
			||||||
                               &throttled,
 | 
					                               &throttled,
 | 
				
			||||||
@@ -200,6 +202,7 @@ namespace ix
 | 
				
			|||||||
                spdlog::info("Subscriber authenticated");
 | 
					                spdlog::info("Subscriber authenticated");
 | 
				
			||||||
                conn.subscribe(channel,
 | 
					                conn.subscribe(channel,
 | 
				
			||||||
                               filter,
 | 
					                               filter,
 | 
				
			||||||
 | 
					                               position,
 | 
				
			||||||
                               [&jsonWriter, verbose, &throttled, &receivedCount, &queueManager](
 | 
					                               [&jsonWriter, verbose, &throttled, &receivedCount, &queueManager](
 | 
				
			||||||
                                   const Json::Value& msg, const std::string& position) {
 | 
					                                   const Json::Value& msg, const std::string& position) {
 | 
				
			||||||
                                   if (verbose)
 | 
					                                   if (verbose)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,6 +14,7 @@ namespace ix
 | 
				
			|||||||
    int cobra_to_sentry_bot(const CobraConfig& config,
 | 
					    int cobra_to_sentry_bot(const CobraConfig& config,
 | 
				
			||||||
                            const std::string& channel,
 | 
					                            const std::string& channel,
 | 
				
			||||||
                            const std::string& filter,
 | 
					                            const std::string& filter,
 | 
				
			||||||
 | 
					                            const std::string& position,
 | 
				
			||||||
                            SentryClient& sentryClient,
 | 
					                            SentryClient& sentryClient,
 | 
				
			||||||
                            bool verbose,
 | 
					                            bool verbose,
 | 
				
			||||||
                            bool strict,
 | 
					                            bool strict,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -62,6 +62,7 @@ namespace ix
 | 
				
			|||||||
    int cobra_to_statsd_bot(const ix::CobraConfig& config,
 | 
					    int cobra_to_statsd_bot(const ix::CobraConfig& config,
 | 
				
			||||||
                            const std::string& channel,
 | 
					                            const std::string& channel,
 | 
				
			||||||
                            const std::string& filter,
 | 
					                            const std::string& filter,
 | 
				
			||||||
 | 
					                            const std::string& position,
 | 
				
			||||||
                            const std::string& host,
 | 
					                            const std::string& host,
 | 
				
			||||||
                            int port,
 | 
					                            int port,
 | 
				
			||||||
                            const std::string& prefix,
 | 
					                            const std::string& prefix,
 | 
				
			||||||
@@ -80,7 +81,7 @@ namespace ix
 | 
				
			|||||||
        std::atomic<bool> stop(false);
 | 
					        std::atomic<bool> stop(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        size_t maxQueueSize = 1000;
 | 
					        size_t maxQueueSize = 1000;
 | 
				
			||||||
        QueueManager queueManager(maxQueueSize, stop);
 | 
					        QueueManager queueManager(maxQueueSize);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        auto timer = [&sentCount, &receivedCount] {
 | 
					        auto timer = [&sentCount, &receivedCount] {
 | 
				
			||||||
            while (true)
 | 
					            while (true)
 | 
				
			||||||
@@ -153,7 +154,7 @@ namespace ix
 | 
				
			|||||||
        std::thread t3(statsdSender);
 | 
					        std::thread t3(statsdSender);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        conn.setEventCallback(
 | 
					        conn.setEventCallback(
 | 
				
			||||||
            [&conn, &channel, &filter, &jsonWriter, verbose, &queueManager, &receivedCount](
 | 
					            [&conn, &channel, &filter, &position, &jsonWriter, verbose, &queueManager, &receivedCount](
 | 
				
			||||||
                ix::CobraConnectionEventType eventType,
 | 
					                ix::CobraConnectionEventType eventType,
 | 
				
			||||||
                const std::string& errMsg,
 | 
					                const std::string& errMsg,
 | 
				
			||||||
                const ix::WebSocketHttpHeaders& headers,
 | 
					                const ix::WebSocketHttpHeaders& headers,
 | 
				
			||||||
@@ -177,6 +178,7 @@ namespace ix
 | 
				
			|||||||
                    spdlog::info("Subscriber authenticated");
 | 
					                    spdlog::info("Subscriber authenticated");
 | 
				
			||||||
                    conn.subscribe(channel,
 | 
					                    conn.subscribe(channel,
 | 
				
			||||||
                                   filter,
 | 
					                                   filter,
 | 
				
			||||||
 | 
					                                   position,
 | 
				
			||||||
                                   [&jsonWriter, &queueManager, verbose, &receivedCount](
 | 
					                                   [&jsonWriter, &queueManager, verbose, &receivedCount](
 | 
				
			||||||
                                       const Json::Value& msg, const std::string& position) {
 | 
					                                       const Json::Value& msg, const std::string& position) {
 | 
				
			||||||
                                       if (verbose)
 | 
					                                       if (verbose)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,6 +14,7 @@ namespace ix
 | 
				
			|||||||
    int cobra_to_statsd_bot(const ix::CobraConfig& config,
 | 
					    int cobra_to_statsd_bot(const ix::CobraConfig& config,
 | 
				
			||||||
                            const std::string& channel,
 | 
					                            const std::string& channel,
 | 
				
			||||||
                            const std::string& filter,
 | 
					                            const std::string& filter,
 | 
				
			||||||
 | 
					                            const std::string& position,
 | 
				
			||||||
                            const std::string& host,
 | 
					                            const std::string& host,
 | 
				
			||||||
                            int port,
 | 
					                            int port,
 | 
				
			||||||
                            const std::string& prefix,
 | 
					                            const std::string& prefix,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,6 @@
 | 
				
			|||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stddef.h>
 | 
					#include <stddef.h>
 | 
				
			||||||
#include <atomic>
 | 
					 | 
				
			||||||
#include <json/json.h>
 | 
					#include <json/json.h>
 | 
				
			||||||
#include <mutex>
 | 
					#include <mutex>
 | 
				
			||||||
#include <condition_variable>
 | 
					#include <condition_variable>
 | 
				
			||||||
@@ -19,9 +18,8 @@ namespace ix
 | 
				
			|||||||
    class QueueManager
 | 
					    class QueueManager
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    public:
 | 
					    public:
 | 
				
			||||||
        QueueManager(size_t maxQueueSize, std::atomic<bool>& stop)
 | 
					        QueueManager(size_t maxQueueSize)
 | 
				
			||||||
            : _maxQueueSize(maxQueueSize)
 | 
					            : _maxQueueSize(maxQueueSize)
 | 
				
			||||||
            , _stop(stop)
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -33,6 +31,5 @@ namespace ix
 | 
				
			|||||||
        std::mutex _mutex;
 | 
					        std::mutex _mutex;
 | 
				
			||||||
        std::condition_variable _condition;
 | 
					        std::condition_variable _condition;
 | 
				
			||||||
        size_t _maxQueueSize;
 | 
					        size_t _maxQueueSize;
 | 
				
			||||||
        std::atomic<bool>& _stop;
 | 
					 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -565,6 +565,7 @@ namespace ix
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    void CobraConnection::subscribe(const std::string& channel,
 | 
					    void CobraConnection::subscribe(const std::string& channel,
 | 
				
			||||||
                                    const std::string& filter,
 | 
					                                    const std::string& filter,
 | 
				
			||||||
 | 
					                                    const std::string& position,
 | 
				
			||||||
                                    SubscriptionCallback cb)
 | 
					                                    SubscriptionCallback cb)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // Create and send a subscribe pdu
 | 
					        // Create and send a subscribe pdu
 | 
				
			||||||
@@ -576,6 +577,11 @@ namespace ix
 | 
				
			|||||||
            body["filter"] = filter;
 | 
					            body["filter"] = filter;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!position.empty())
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            body["position"] = position;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Json::Value pdu;
 | 
					        Json::Value pdu;
 | 
				
			||||||
        pdu["action"] = "rtm/subscribe";
 | 
					        pdu["action"] = "rtm/subscribe";
 | 
				
			||||||
        pdu["body"] = body;
 | 
					        pdu["body"] = body;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -98,6 +98,7 @@ namespace ix
 | 
				
			|||||||
        // message arrives.
 | 
					        // message arrives.
 | 
				
			||||||
        void subscribe(const std::string& channel,
 | 
					        void subscribe(const std::string& channel,
 | 
				
			||||||
                       const std::string& filter = std::string(),
 | 
					                       const std::string& filter = std::string(),
 | 
				
			||||||
 | 
					                       const std::string& position = std::string(),
 | 
				
			||||||
                       SubscriptionCallback cb = nullptr);
 | 
					                       SubscriptionCallback cb = nullptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// Unsubscribe from a channel
 | 
					        /// Unsubscribe from a channel
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,4 +6,4 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define IX_WEBSOCKET_VERSION "8.2.3"
 | 
					#define IX_WEBSOCKET_VERSION "8.2.4"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -122,8 +122,10 @@ namespace
 | 
				
			|||||||
    void CobraChat::subscribe(const std::string& channel)
 | 
					    void CobraChat::subscribe(const std::string& channel)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        std::string filter;
 | 
					        std::string filter;
 | 
				
			||||||
 | 
					        std::string position("$");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        _conn.subscribe(
 | 
					        _conn.subscribe(
 | 
				
			||||||
            channel, filter, [this](const Json::Value& msg, const std::string& /*position*/) {
 | 
					            channel, filter, position, [this](const Json::Value& msg, const std::string& /*position*/) {
 | 
				
			||||||
                spdlog::info("receive {}", msg.toStyledString());
 | 
					                spdlog::info("receive {}", msg.toStyledString());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (!msg.isObject()) return;
 | 
					                if (!msg.isObject()) return;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -93,8 +93,10 @@ namespace
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                log("Subscriber authenticated");
 | 
					                log("Subscriber authenticated");
 | 
				
			||||||
                std::string filter;
 | 
					                std::string filter;
 | 
				
			||||||
 | 
					                std::string position("$");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                conn.subscribe(
 | 
					                conn.subscribe(
 | 
				
			||||||
                    CHANNEL, filter, [](const Json::Value& msg, const std::string& /*position*/) {
 | 
					                    CHANNEL, filter, position, [](const Json::Value& msg, const std::string& /*position*/) {
 | 
				
			||||||
                        log(msg.toStyledString());
 | 
					                        log(msg.toStyledString());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        std::string id = msg["id"].asString();
 | 
					                        std::string id = msg["id"].asString();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -153,6 +153,7 @@ TEST_CASE("Cobra_to_sentry_bot", "[foo]")
 | 
				
			|||||||
        std::thread publisherThread(runPublisher, config, channel);
 | 
					        std::thread publisherThread(runPublisher, config, channel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        std::string filter;
 | 
					        std::string filter;
 | 
				
			||||||
 | 
					        std::string position("$");
 | 
				
			||||||
        bool verbose = true;
 | 
					        bool verbose = true;
 | 
				
			||||||
        bool strict = true;
 | 
					        bool strict = true;
 | 
				
			||||||
        size_t maxQueueSize = 10;
 | 
					        size_t maxQueueSize = 10;
 | 
				
			||||||
@@ -182,6 +183,7 @@ TEST_CASE("Cobra_to_sentry_bot", "[foo]")
 | 
				
			|||||||
        int sentCount = cobra_to_sentry_bot(config,
 | 
					        int sentCount = cobra_to_sentry_bot(config,
 | 
				
			||||||
                                            channel,
 | 
					                                            channel,
 | 
				
			||||||
                                            filter,
 | 
					                                            filter,
 | 
				
			||||||
 | 
					                                            position,
 | 
				
			||||||
                                            sentryClient,
 | 
					                                            sentryClient,
 | 
				
			||||||
                                            verbose,
 | 
					                                            verbose,
 | 
				
			||||||
                                            strict,
 | 
					                                            strict,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								ws/ws.cpp
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								ws/ws.cpp
									
									
									
									
									
								
							@@ -65,6 +65,7 @@ int main(int argc, char** argv)
 | 
				
			|||||||
    std::string pidfile;
 | 
					    std::string pidfile;
 | 
				
			||||||
    std::string channel;
 | 
					    std::string channel;
 | 
				
			||||||
    std::string filter;
 | 
					    std::string filter;
 | 
				
			||||||
 | 
					    std::string position;
 | 
				
			||||||
    std::string message;
 | 
					    std::string message;
 | 
				
			||||||
    std::string password;
 | 
					    std::string password;
 | 
				
			||||||
    std::string prefix("ws.test.v0");
 | 
					    std::string prefix("ws.test.v0");
 | 
				
			||||||
@@ -229,6 +230,7 @@ int main(int argc, char** argv)
 | 
				
			|||||||
    cobraSubscribeApp->add_option("--channel", channel, "Channel")->required();
 | 
					    cobraSubscribeApp->add_option("--channel", channel, "Channel")->required();
 | 
				
			||||||
    cobraSubscribeApp->add_option("--pidfile", pidfile, "Pid file");
 | 
					    cobraSubscribeApp->add_option("--pidfile", pidfile, "Pid file");
 | 
				
			||||||
    cobraSubscribeApp->add_option("--filter", filter, "Stream SQL Filter");
 | 
					    cobraSubscribeApp->add_option("--filter", filter, "Stream SQL Filter");
 | 
				
			||||||
 | 
					    cobraSubscribeApp->add_option("--position", position, "Stream position");
 | 
				
			||||||
    cobraSubscribeApp->add_flag("-q", quiet, "Quiet / only display stats");
 | 
					    cobraSubscribeApp->add_flag("-q", quiet, "Quiet / only display stats");
 | 
				
			||||||
    cobraSubscribeApp->add_flag("--fluentd", fluentd, "Write fluentd prefix");
 | 
					    cobraSubscribeApp->add_flag("--fluentd", fluentd, "Write fluentd prefix");
 | 
				
			||||||
    addTLSOptions(cobraSubscribeApp);
 | 
					    addTLSOptions(cobraSubscribeApp);
 | 
				
			||||||
@@ -263,6 +265,7 @@ int main(int argc, char** argv)
 | 
				
			|||||||
    cobra2statsd->add_flag("-v", verbose, "Verbose");
 | 
					    cobra2statsd->add_flag("-v", verbose, "Verbose");
 | 
				
			||||||
    cobra2statsd->add_option("--pidfile", pidfile, "Pid file");
 | 
					    cobra2statsd->add_option("--pidfile", pidfile, "Pid file");
 | 
				
			||||||
    cobra2statsd->add_option("--filter", filter, "Stream SQL Filter");
 | 
					    cobra2statsd->add_option("--filter", filter, "Stream SQL Filter");
 | 
				
			||||||
 | 
					    cobra2statsd->add_option("--position", position, "Stream position");
 | 
				
			||||||
    addTLSOptions(cobra2statsd);
 | 
					    addTLSOptions(cobra2statsd);
 | 
				
			||||||
    addCobraConfig(cobra2statsd);
 | 
					    addCobraConfig(cobra2statsd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -276,6 +279,7 @@ int main(int argc, char** argv)
 | 
				
			|||||||
    cobra2sentry->add_flag("-s", strict, "Strict mode. Error out when sending to sentry fails");
 | 
					    cobra2sentry->add_flag("-s", strict, "Strict mode. Error out when sending to sentry fails");
 | 
				
			||||||
    cobra2sentry->add_option("--pidfile", pidfile, "Pid file");
 | 
					    cobra2sentry->add_option("--pidfile", pidfile, "Pid file");
 | 
				
			||||||
    cobra2sentry->add_option("--filter", filter, "Stream SQL Filter");
 | 
					    cobra2sentry->add_option("--filter", filter, "Stream SQL Filter");
 | 
				
			||||||
 | 
					    cobra2sentry->add_option("--position", position, "Stream position");
 | 
				
			||||||
    addTLSOptions(cobra2sentry);
 | 
					    addTLSOptions(cobra2sentry);
 | 
				
			||||||
    addCobraConfig(cobra2sentry);
 | 
					    addCobraConfig(cobra2sentry);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -284,6 +288,7 @@ int main(int argc, char** argv)
 | 
				
			|||||||
    cobra2redisApp->add_option("channel", channel, "Channel")->required();
 | 
					    cobra2redisApp->add_option("channel", channel, "Channel")->required();
 | 
				
			||||||
    cobra2redisApp->add_option("--pidfile", pidfile, "Pid file");
 | 
					    cobra2redisApp->add_option("--pidfile", pidfile, "Pid file");
 | 
				
			||||||
    cobra2redisApp->add_option("--filter", filter, "Stream SQL Filter");
 | 
					    cobra2redisApp->add_option("--filter", filter, "Stream SQL Filter");
 | 
				
			||||||
 | 
					    cobra2redisApp->add_option("--position", position, "Stream position");
 | 
				
			||||||
    cobra2redisApp->add_option("--hostname", hostname, "Redis hostname");
 | 
					    cobra2redisApp->add_option("--hostname", hostname, "Redis hostname");
 | 
				
			||||||
    cobra2redisApp->add_option("--port", redisPort, "Redis port");
 | 
					    cobra2redisApp->add_option("--port", redisPort, "Redis port");
 | 
				
			||||||
    cobra2redisApp->add_flag("-q", quiet, "Quiet / only display stats");
 | 
					    cobra2redisApp->add_flag("-q", quiet, "Quiet / only display stats");
 | 
				
			||||||
@@ -429,7 +434,7 @@ int main(int argc, char** argv)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    else if (app.got_subcommand("cobra_subscribe"))
 | 
					    else if (app.got_subcommand("cobra_subscribe"))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ret = ix::ws_cobra_subscribe_main(cobraConfig, channel, filter, quiet, fluentd);
 | 
					        ret = ix::ws_cobra_subscribe_main(cobraConfig, channel, filter, position, quiet, fluentd);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else if (app.got_subcommand("cobra_publish"))
 | 
					    else if (app.got_subcommand("cobra_publish"))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -442,7 +447,7 @@ int main(int argc, char** argv)
 | 
				
			|||||||
    else if (app.got_subcommand("cobra_to_statsd"))
 | 
					    else if (app.got_subcommand("cobra_to_statsd"))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ret = ix::cobra_to_statsd_bot(
 | 
					        ret = ix::cobra_to_statsd_bot(
 | 
				
			||||||
            cobraConfig, channel, filter, hostname, statsdPort, prefix, fields, verbose);
 | 
					            cobraConfig, channel, filter, position, hostname, statsdPort, prefix, fields, verbose);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else if (app.got_subcommand("cobra_to_sentry"))
 | 
					    else if (app.got_subcommand("cobra_to_sentry"))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -453,6 +458,7 @@ int main(int argc, char** argv)
 | 
				
			|||||||
        ret = ix::cobra_to_sentry_bot(cobraConfig,
 | 
					        ret = ix::cobra_to_sentry_bot(cobraConfig,
 | 
				
			||||||
                                      channel,
 | 
					                                      channel,
 | 
				
			||||||
                                      filter,
 | 
					                                      filter,
 | 
				
			||||||
 | 
					                                      position,
 | 
				
			||||||
                                      sentryClient,
 | 
					                                      sentryClient,
 | 
				
			||||||
                                      verbose,
 | 
					                                      verbose,
 | 
				
			||||||
                                      strict,
 | 
					                                      strict,
 | 
				
			||||||
@@ -462,7 +468,7 @@ int main(int argc, char** argv)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    else if (app.got_subcommand("cobra_metrics_to_redis"))
 | 
					    else if (app.got_subcommand("cobra_metrics_to_redis"))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ret = ix::ws_cobra_metrics_to_redis(cobraConfig, channel, filter, hostname, redisPort);
 | 
					        ret = ix::ws_cobra_metrics_to_redis(cobraConfig, channel, filter, position, hostname, redisPort);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else if (app.got_subcommand("snake"))
 | 
					    else if (app.got_subcommand("snake"))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								ws/ws.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								ws/ws.h
									
									
									
									
									
								
							@@ -78,6 +78,7 @@ namespace ix
 | 
				
			|||||||
    int ws_cobra_subscribe_main(const ix::CobraConfig& config,
 | 
					    int ws_cobra_subscribe_main(const ix::CobraConfig& config,
 | 
				
			||||||
                                const std::string& channel,
 | 
					                                const std::string& channel,
 | 
				
			||||||
                                const std::string& filter,
 | 
					                                const std::string& filter,
 | 
				
			||||||
 | 
					                                const std::string& position,
 | 
				
			||||||
                                bool quiet,
 | 
					                                bool quiet,
 | 
				
			||||||
                                bool fluentd);
 | 
					                                bool fluentd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -93,6 +94,7 @@ namespace ix
 | 
				
			|||||||
    int ws_cobra_metrics_to_redis(const ix::CobraConfig& config,
 | 
					    int ws_cobra_metrics_to_redis(const ix::CobraConfig& config,
 | 
				
			||||||
                                  const std::string& channel,
 | 
					                                  const std::string& channel,
 | 
				
			||||||
                                  const std::string& filter,
 | 
					                                  const std::string& filter,
 | 
				
			||||||
 | 
					                                  const std::string& position,
 | 
				
			||||||
                                  const std::string& host,
 | 
					                                  const std::string& host,
 | 
				
			||||||
                                  int port);
 | 
					                                  int port);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,6 +20,7 @@ namespace ix
 | 
				
			|||||||
    int ws_cobra_metrics_to_redis(const ix::CobraConfig& config,
 | 
					    int ws_cobra_metrics_to_redis(const ix::CobraConfig& config,
 | 
				
			||||||
                                  const std::string& channel,
 | 
					                                  const std::string& channel,
 | 
				
			||||||
                                  const std::string& filter,
 | 
					                                  const std::string& filter,
 | 
				
			||||||
 | 
					                                  const std::string& position,
 | 
				
			||||||
                                  const std::string& host,
 | 
					                                  const std::string& host,
 | 
				
			||||||
                                  int port)
 | 
					                                  int port)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -100,6 +101,7 @@ namespace ix
 | 
				
			|||||||
        conn.setEventCallback([&conn,
 | 
					        conn.setEventCallback([&conn,
 | 
				
			||||||
                               &channel,
 | 
					                               &channel,
 | 
				
			||||||
                               &filter,
 | 
					                               &filter,
 | 
				
			||||||
 | 
					                               &position,
 | 
				
			||||||
                               &msgCount,
 | 
					                               &msgCount,
 | 
				
			||||||
                               &msgPerSeconds,
 | 
					                               &msgPerSeconds,
 | 
				
			||||||
                               &conditionVariableMutex,
 | 
					                               &conditionVariableMutex,
 | 
				
			||||||
@@ -125,6 +127,7 @@ namespace ix
 | 
				
			|||||||
                conn.subscribe(
 | 
					                conn.subscribe(
 | 
				
			||||||
                    channel,
 | 
					                    channel,
 | 
				
			||||||
                    filter,
 | 
					                    filter,
 | 
				
			||||||
 | 
					                    position,
 | 
				
			||||||
                    [&msgPerSeconds, &msgCount, &conditionVariableMutex, &condition, &queue](
 | 
					                    [&msgPerSeconds, &msgCount, &conditionVariableMutex, &condition, &queue](
 | 
				
			||||||
                        const Json::Value& msg, const std::string& /*position*/) {
 | 
					                        const Json::Value& msg, const std::string& /*position*/) {
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,6 +41,7 @@ namespace ix
 | 
				
			|||||||
    int ws_cobra_subscribe_main(const ix::CobraConfig& config,
 | 
					    int ws_cobra_subscribe_main(const ix::CobraConfig& config,
 | 
				
			||||||
                                const std::string& channel,
 | 
					                                const std::string& channel,
 | 
				
			||||||
                                const std::string& filter,
 | 
					                                const std::string& filter,
 | 
				
			||||||
 | 
					                                const std::string& position,
 | 
				
			||||||
                                bool quiet,
 | 
					                                bool quiet,
 | 
				
			||||||
                                bool fluentd)
 | 
					                                bool fluentd)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -68,7 +69,7 @@ namespace ix
 | 
				
			|||||||
        std::thread t(timer);
 | 
					        std::thread t(timer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        conn.setEventCallback(
 | 
					        conn.setEventCallback(
 | 
				
			||||||
            [&conn, &channel, &jsonWriter, &filter, &msgCount, &msgPerSeconds, &quiet, &fluentd](
 | 
					            [&conn, &channel, &jsonWriter, &filter, &position, &msgCount, &msgPerSeconds, &quiet, &fluentd](
 | 
				
			||||||
                ix::CobraConnectionEventType eventType,
 | 
					                ix::CobraConnectionEventType eventType,
 | 
				
			||||||
                const std::string& errMsg,
 | 
					                const std::string& errMsg,
 | 
				
			||||||
                const ix::WebSocketHttpHeaders& headers,
 | 
					                const ix::WebSocketHttpHeaders& headers,
 | 
				
			||||||
@@ -88,6 +89,7 @@ namespace ix
 | 
				
			|||||||
                    spdlog::info("Subscriber authenticated");
 | 
					                    spdlog::info("Subscriber authenticated");
 | 
				
			||||||
                    conn.subscribe(channel,
 | 
					                    conn.subscribe(channel,
 | 
				
			||||||
                                   filter,
 | 
					                                   filter,
 | 
				
			||||||
 | 
					                                   position,
 | 
				
			||||||
                                   [&jsonWriter, &quiet, &msgPerSeconds, &msgCount, &fluentd](
 | 
					                                   [&jsonWriter, &quiet, &msgPerSeconds, &msgCount, &fluentd](
 | 
				
			||||||
                                       const Json::Value& msg, const std::string& position) {
 | 
					                                       const Json::Value& msg, const std::string& position) {
 | 
				
			||||||
                                       if (!quiet)
 | 
					                                       if (!quiet)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user