code: @AroundInvoke
      @AroundTimeout
      public Object aroundInvoke(InvocationContext ctx) throws Throwable {
          final Method method = ctx.getMethod();
  
          final Count annotation = getAnnotationFromContext(ctx, Count.class);
          final CountParameter parameter = method.getAnnotation(CountParameter.class);
  
          final String producerId = annotation.producerId().isEmpty() ? method.getDeclaringClass().getSimpleName() : annotation.producerId();
          final String caseName = (parameter != null && !parameter.value().isEmpty()) ? parameter.value() : method.getName();
          final OnDemandStatsProducer onDemandProducer = getProducer(method.getDeclaringClass(), producerId, annotation.category(), annotation.subsystem(), false);
  
          if (onDemandProducer != null) {
              final CounterStats defaultStats = getDefaultStats(onDemandProducer);
              final CounterStats stats = getStats(onDemandProducer, caseName);
  
              if (defaultStats != null)
                  defaultStats.inc();
              if (stats != null)
                  stats.inc();
          }
  
          return proceed(ctx);
      }
docs: Around method invoke.
  
  @param ctx context
  @return method result
  @throws Throwable any exception