@Override public List<Subscription> subscriptionsOfTopic(TopicName topicName) { return subscriptions.values().stream() .filter(s -> s.getTopicName().equals(topicName)) .collect(Collectors.toList()); }
private void awaitUntilNextPoll() { try (Timer.Context ctx = metrics.timer(CONSUMER_IDLE_TIME, subscription.getTopicName(), subscription.getName()).time()) { Thread.sleep(idleTimeCalculator.increaseIdleTime()); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); } }
private void updateMeters(Subscription subscription) { hermesMetrics.meter(Meters.DISCARDED_METER).mark(); hermesMetrics.meter(Meters.DISCARDED_TOPIC_METER, subscription.getTopicName()).mark(); hermesMetrics.meter(Meters.DISCARDED_SUBSCRIPTION_METER, subscription.getTopicName(), subscription.getName()).mark(); }
public int countActiveConsumers(Subscription subscription) { // This is an ad-hoc implementation, utilizing exising inflight nodes. return counterStorage.countInflightNodes(subscription.getTopicName(), subscription.getName()); } }
private void updateMeters(Message message, Subscription subscription, MessageSendingResult result) { hermesMetrics.meter(Meters.METER).mark(); hermesMetrics.meter(Meters.TOPIC_METER, subscription.getTopicName()).mark(); hermesMetrics.meter(Meters.SUBSCRIPTION_METER, subscription.getTopicName(), subscription.getName()).mark(); hermesMetrics.meter( Meters.SUBSCRIPTION_THROUGHPUT_BYTES, subscription.getTopicName(), subscription.getName()) .mark(message.getSize()); hermesMetrics.registerConsumerHttpAnswer(subscription, result.getStatusCode()); } }
public String subscriptionPath(Subscription subscription) { return subscriptionPath(subscription.getTopicName(), subscription.getName()); }
protected void updateMetrics(String counterToUpdate, Message message, Subscription subscription) { hermesMetrics.counter(counterToUpdate, subscription.getTopicName(), subscription.getName()).inc(); hermesMetrics.decrementInflightCounter(subscription); hermesMetrics.inflightTimeHistogram(subscription).update(System.currentTimeMillis() - message.getReadingTimestamp()); } }
public void markDiscarded(MessageBatch batch, Subscription subscription, String reason) { metrics.counter(Counters.DISCARDED, subscription.getTopicName(), subscription.getName()).inc(batch.size()); metrics.meter(Meters.DISCARDED_METER).mark(batch.size()); metrics.meter(Meters.DISCARDED_TOPIC_METER, subscription.getTopicName()).mark(batch.size()); metrics.meter(Meters.DISCARDED_SUBSCRIPTION_METER, subscription.getTopicName(), subscription.getName()).mark(batch.size()); batch.getMessagesMetadata().forEach(m -> trackers.get(subscription).logDiscarded(m, reason)); }
private void markDelivered(MessageBatch batch, Subscription subscription, MessageSendingResult result) { metrics.registerConsumerHttpAnswer(subscription, result.getStatusCode()); metrics.meter(METER).mark(batch.size()); metrics.meter(TOPIC_METER, subscription.getTopicName()).mark(batch.size()); metrics.meter(SUBSCRIPTION_METER, subscription.getTopicName(), subscription.getName()).mark(batch.size()); metrics.meter(SUBSCRIPTION_BATCH_METER, subscription.getTopicName(), subscription.getName()).mark(); metrics.counter(Counters.DELIVERED, subscription.getTopicName(), subscription.getName()).inc(batch.size()); batch.getMessagesMetadata().forEach(m -> trackers.get(subscription).logSent(m, result.getHostname())); }
@Override public void createSubscription(Subscription subscription) { ensureConnected(); topicRepository.ensureTopicExists(subscription.getTopicName()); String subscriptionPath = paths.subscriptionPath(subscription); logger.info("Creating subscription {}", subscription.getQualifiedName()); try { zookeeper.create().forPath(subscriptionPath, mapper.writeValueAsBytes(subscription)); } catch (KeeperException.NodeExistsException ex) { throw new SubscriptionAlreadyExistsException(subscription, ex); } catch (Exception ex) { throw new InternalProcessingException(ex); } }
@Override public void updateSubscription(Subscription modifiedSubscription) { ensureSubscriptionExists(modifiedSubscription.getTopicName(), modifiedSubscription.getName()); logger.info("Updating subscription {}", modifiedSubscription.getQualifiedName()); overwrite(paths.subscriptionPath(modifiedSubscription), modifiedSubscription); }
@Override public void shutdown() { hermesMetrics.unregisterOutputRateGauge(subscription.getTopicName(), subscription.getName()); rateLimitSupervisor.unregister(this); outputRateCalculator.shutdown(); }
public void registerConsumerHttpAnswer(Subscription subscription, int statusCode) { PathContext pathContext = pathContext() .withGroup(escapeDots(subscription.getTopicName().getGroupName())) .withTopic(escapeDots(subscription.getTopicName().getName())) .withSubscription(escapeDots(subscription.getName())) .withHttpCode(statusCode) .withHttpCodeFamily(httpStatusFamily(statusCode)) .build(); metricRegistry.meter(pathCompiler.compile(Meters.ERRORS_HTTP_BY_FAMILY, pathContext)).mark(); metricRegistry.meter(pathCompiler.compile(Meters.ERRORS_HTTP_BY_CODE, pathContext)).mark(); }
private void setUpMetrics(Subscription subscription) { when(hermesMetrics.latencyTimer(subscription)).thenReturn(consumerLatencyTimer); when(hermesMetrics.consumerErrorsOtherMeter(subscription)).thenReturn(errors); when(consumerLatencyTimer.time()).thenReturn(consumerLatencyTimerContext); when(hermesMetrics.meter(Meters.FAILED_METER_SUBSCRIPTION, subscription.getTopicName(), subscription.getName())).thenReturn(failedMeter); }
public void checkModification(Subscription toCheck) { apiPreconditions.checkConstraints(toCheck); ownerIdValidator.check(toCheck.getOwner()); messageFilterTypeValidator.check(toCheck, topicService.getTopicDetails(toCheck.getTopicName())); }
public Meter consumerErrorsTimeoutMeter(Subscription subscription) { PathContext pathContext = pathContext() .withGroup(escapeDots(subscription.getTopicName().getGroupName())) .withTopic(escapeDots(subscription.getTopicName().getName())) .withSubscription(escapeDots(subscription.getName())) .build(); return metricRegistry.meter(pathCompiler.compile(Meters.ERRORS_TIMEOUTS, pathContext)); }
@Override public void assignConsumerForSubscription(Subscription subscription) { try { Signal start = Signal.of(Signal.SignalType.START, subscription.getQualifiedName(), subscription); backgroundProcess.accept(start); if (subscription.getState() == PENDING) { subscriptionRepository.updateSubscriptionState(subscription.getTopicName(), subscription.getName(), ACTIVE); } } catch (RuntimeException e) { logger.error("Error during assigning subscription {} to consumer", subscription.getQualifiedName(), e); } }
public Meter oAuthSubscriptionTokenRequestMeter(Subscription subscription, String oAuthProviderName) { PathContext pathContext = pathContext() .withGroup(escapeDots(subscription.getTopicName().getGroupName())) .withTopic(escapeDots(subscription.getTopicName().getName())) .withSubscription(escapeDots(subscription.getName())) .withOAuthProvider(escapeDots(oAuthProviderName)) .build(); return metricRegistry.meter(pathCompiler.compile(Meters.OAUTH_SUBSCRIPTION_TOKEN_REQUEST, pathContext)); }
public Histogram inflightTimeHistogram(Subscription subscription) { return metricRegistry.histogram(pathCompiler.compile(Histograms.INFLIGHT_TIME, pathContext() .withGroup(escapeDots(subscription.getTopicName().getGroupName())) .withTopic(escapeDots(subscription.getTopicName().getName())) .withSubscription(escapeDots(subscription.getName())) .build())); }
public void checkCreation(Subscription toCheck, CreatorRights creatorRights) { apiPreconditions.checkConstraints(toCheck); ownerIdValidator.check(toCheck.getOwner()); messageFilterTypeValidator.check(toCheck, topicService.getTopicDetails(toCheck.getTopicName())); if (!creatorRights.allowedToCreate(toCheck)) { throw new PermissionDeniedException("You are not allowed to create subscriptions for this topic."); } if (!creatorRights.allowedToManage(toCheck)) { throw new SubscriptionValidationException("Provide an owner that includes you, you would not be able to manage this subscription later"); } }