All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.spotify.apollo.meta.model.CallsInfo Maven / Gradle / Ivy

There is a newer version: 1.6.1
Show newest version
/*
 * -\-\-
 * Spotify Apollo API Implementations
 * --
 * Copyright (C) 2013 - 2015 Spotify AB
 * --
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * -/-/-
 */
package com.spotify.apollo.meta.model;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

import java.util.List;
import java.util.concurrent.ConcurrentMap;

/**
* Tracks information about calls made to different endpoints.
*/
class CallsInfo implements MetaGatherer.CallsGatherer {
  private int sizeLimit;
  private Model.EndpointsInfo endpointsInfo = new Model.EndpointsInfo();
  private ConcurrentMap
      endpoints = Maps.newConcurrentMap();

  public CallsInfo(int sizeLimit) {
    this.sizeLimit = sizeLimit;
  }

  Model.EndpointsInfo getEndpointsInfo() {
    endpointsInfo.endpoints = Lists.newArrayListWithCapacity(endpoints.size());
    for (EndpointInfoGatherer endpoint : endpoints.values()) {
      endpointsInfo.endpoints.add(endpoint.endpointInfo());
    }
    return endpointsInfo;
  }

  @Override
  public void setDocstring(String docstring) {
    this.endpointsInfo.docstring = docstring;
  }

  @Override
  public MetaGatherer.EndpointGatherer namedEndpointGatherer(String key) {
    if (!endpoints.containsKey(key)) {
      if (endpoints.size() < sizeLimit) {
        endpoints.putIfAbsent(key, new EndpointInfoGatherer(key, sizeLimit));
      } else {
        if (!endpoints.containsKey(DefaultMetaGatherer.OVER_SIZE_KEY)) {
          endpoints.putIfAbsent(
              DefaultMetaGatherer.OVER_SIZE_KEY, new EndpointInfoGatherer(
              DefaultMetaGatherer.OVER_SIZE_KEY, sizeLimit));
        }
        return endpoints.get(DefaultMetaGatherer.OVER_SIZE_KEY);
      }
    }
    return endpoints.get(key);
  }

  @Override
  public MetaGatherer.EndpointGatherer uriMethodsEndpointGatherer(String uri, List methods) {
    StringBuilder key = new StringBuilder(uri);
    key.append('[');
    boolean first = true;
    for (String method : methods) {
      if (first) {
        first = false;
      } else {
        key.append(',');
      }
      key.append(method);
    }
    key.append(']');
    return namedEndpointGatherer(key.toString());
  }

  @Override
  public MetaGatherer.EndpointGatherer uriEndpointGatherer(String uri) {
    return namedEndpointGatherer(uri);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy