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

com.unboundid.scim.wink.ResourceStats Maven / Gradle / Ivy

/*
 * Copyright 2011-2019 Ping Identity Corporation
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License (GPLv2 only)
 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only)
 * as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see .
 */

package com.unboundid.scim.wink;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;

/**
 * This class holds various statistics of each SCIM resource being served.
 */
public class ResourceStats
{
  /**
   * Number of query requests that were successful.
   */
  public static final String QUERY_OK = "query-successful";

  /**
   * Number of query requests that failed with code 400 Bad Request.
   */
  public static final String QUERY_BAD_REQUEST = "query-400";

  /**
   * Number of query requests that failed with code 401 Unauthorized.
   */
  public static final String QUERY_UNAUTHORIZED = "query-401";

  /**
   * Number of query requests that failed with code 403 Forbidden.
   */
  public static final String QUERY_FORBIDDEN = "query-403";

  /**
   * Number of query requests that failed with code 404 Not Found.
   */
  public static final String QUERY_NOT_FOUND = "query-404";

  /**
   * Number of query requests that failed with code 500 Internal Server Error.
   */
  public static final String QUERY_INTERNAL_SERVER_ERROR = "query-500";

  /**
   * Number of query requests that failed with code 505 Not Implemented.
   */
  public static final String QUERY_NOT_IMPLEMENTED = "query-505";

  /**
   * Number of query requests that responded in XML format.
   */
  public static final String QUERY_RESPONSE_XML = "query-response-xml";

  /**
   * Number of query requests that responded in JSON format.
   */
  public static final String QUERY_RESPONSE_JSON = "query-response-json";


  /**
   * Number of get requests that were successful.
   */
  public static final String GET_OK = "get-successful";

  /**
   * Number of versioned get requests that were not modified.
   */
  public static final String GET_NOT_MODIFIED = "get-304";

  /**
   * Number of get requests that failed with code 400 Bad Request.
   */
  public static final String GET_BAD_REQUEST = "get-400"

  /**
   * Number of get requests that failed with code 401 Unauthorized.
   */;
  public static final String GET_UNAUTHORIZED = "get-401";

  /**
   * Number of get requests that failed with code 403 Forbidden.
   */
  public static final String GET_FORBIDDEN = "get-403";

  /**
   * Number of get requests that failed with code 404 Not Found.
   */
  public static final String GET_NOT_FOUND = "get-404";

  /**
   * Number of get requests that failed with code 500 Internal Server Error.
   */
  public static final String GET_INTERNAL_SERVER_ERROR = "get-500";

  /**
   * Number of get requests that failed with code 505 Not Implemented.
   */
  public static final String GET_NOT_IMPLEMENTED = "get-505";

  /**
   * Number of get requests that responded in XML format.
   */
  public static final String GET_RESPONSE_XML = "get-response-xml";

  /**
   * Number of get requests that responded in JSON format.
   */
  public static final String GET_RESPONSE_JSON = "get-response-json";

  /**
   * Number of put requests that were successful.
   */
  public static final String PUT_OK = "put-successful";

  /**
   * Number of put requests that failed with code 400 Bad Request.
   */
  public static final String PUT_BAD_REQUEST = "put-400";

  /**
   * Number of put requests that failed with code 401 Unauthorized.
   */
  public static final String PUT_UNAUTHORIZED = "put-401";

  /**
   * Number of put requests that failed with code 403 Forbidden.
   */
  public static final String PUT_FORBIDDEN = "put-403";

  /**
   * Number of put requests that failed with code 404 Not Found.
   */
  public static final String PUT_NOT_FOUND = "put-404";

  /**
   * Number of put requests that failed with code 409 Conflict.
   */
  public static final String PUT_CONFLICT = "put-409";

  /**
   * Number of put requests that failed with code 412 Precondition Failed.
   */
  public static final String PUT_PRECONDITION_FAILED = "put-412";

  /**
   * Number of put requests that failed with code 500 Internal Server Error.
   */
  public static final String PUT_INTERNAL_SERVER_ERROR = "put-500";

  /**
   * Number of put requests that failed with code 505 Not Implemented.
   */
  public static final String PUT_NOT_IMPLEMENTED = "put-505";

  /**
   * Number of put requests that responded in XML format.
   */
  public static final String PUT_RESPONSE_XML = "put-response-xml";

  /**
   * Number of put requests that responded in JSON format.
   */
  public static final String PUT_RESPONSE_JSON = "put-response-json";

  /**
   * Number of put requests with content in XML format.
   */
  public static final String PUT_CONTENT_XML = "put-content-xml";

  /**
   * Number of put requests with content in JSON format.
   */
  public static final String PUT_CONTENT_JSON = "put-content-json";


  /**
   * Number of post requests that were successful.
   */
  public static final String POST_OK = "post-successful";

  /**
   * Number of post requests that failed with code 400 Bad Request.
   */
  public static final String POST_BAD_REQUEST = "post-400";

  /**
   * Number of post requests that failed with code 401 Unauthorized.
   */
  public static final String POST_UNAUTHORIZED = "post-401";

  /**
   * Number of post requests that failed with code 403 Forbidden.
   */
  public static final String POST_FORBIDDEN = "post-403";

  /**
   * Number of post requests that failed with code 409 Conflict.
   */
  public static final String POST_CONFLICT = "post-409";

  /**
   * Number of post requests that failed with code 413 Entity Too Large.
   */
  public static final String POST_REQUEST_ENTITY_TOO_LARGE = "post-413";

  /**
   * Number of post requests that failed with code 500 Internal Server Error.
   */
  public static final String POST_INTERNAL_SERVER_ERROR = "post-500";

  /**
   * Number of post requests that failed with code 505 Not Implemented.
   */
  public static final String POST_NOT_IMPLEMENTED = "post-505";

  /**
   * Number of post requests that responded in XML format.
   */
  public static final String POST_RESPONSE_XML = "post-response-xml";

  /**
   * Number of post requests that responded in JSON format.
   */
  public static final String POST_RESPONSE_JSON = "post-response-json";

  /**
   * Number of post requests with content in XML format.
   */
  public static final String POST_CONTENT_XML = "post-content-xml";

  /**
   * Number of post requests with content in JSON format.
   */
  public static final String POST_CONTENT_JSON = "post-content-json";


  /**
   * Number of patch requests that were successful.
   */
  public static final String PATCH_OK = "patch-successful";

  /**
   * Number of patch requests that failed with code 400 Bad Request.
   */
  public static final String PATCH_BAD_REQUEST = "patch-400";

  /**
   * Number of patch requests that failed with code 401 Unauthorized.
   */
  public static final String PATCH_UNAUTHORIZED = "patch-401";

  /**
   * Number of patch requests that failed with code 403 Forbidden.
   */
  public static final String PATCH_FORBIDDEN = "patch-403";

  /**
   * Number of patch requests that failed with code 404 Not Found.
   */
  public static final String PATCH_NOT_FOUND = "patch-404";

  /**
   * Number of patch requests that failed with code 409 Conflict.
   */
  public static final String PATCH_CONFLICT = "patch-409";

  /**
   * Number of patch requests that failed with code 412 Precondition Failed.
   */
  public static final String PATCH_PRECONDITION_FAILED = "patch-412";

  /**
   * Number of patch requests that failed with code 500 Internal Server Error.
   */
  public static final String PATCH_INTERNAL_SERVER_ERROR = "patch-500";

  /**
   * Number of patch requests that failed with code 505 Not Implemented.
   */
  public static final String PATCH_NOT_IMPLEMENTED = "patch-505";

  /**
   * Number of patch requests that responded in XML format.
   */
  public static final String PATCH_RESPONSE_XML = "patch-response-xml";

  /**
   * Number of patch requests that responded in JSON format.
   */
  public static final String PATCH_RESPONSE_JSON = "patch-response-json";

  /**
   * Number of patch requests with content in XML format.
   */
  public static final String PATCH_CONTENT_XML = "patch-content-xml";

  /**
   * Number of patch requests with content in JSON format.
   */
  public static final String PATCH_CONTENT_JSON = "patch-content-json";


  /**
   * Number of delete requests that were successful.
   */
  public static final String DELETE_OK = "delete-successful";

  /**
   * Number of delete requests that failed with code 400 Bad Request.
   */
  public static final String DELETE_BAD_REQUEST = "delete-400";

  /**
   * Number of delete requests that failed with code 401 Unauthorized.
   */
  public static final String DELETE_UNAUTHORIZED = "delete-401";

  /**
   * Number of delete requests that failed with code 403 Forbidden.
   */
  public static final String DELETE_FORBIDDEN = "delete-403";

  /**
   * Number of delete requests that failed with code 404 Not Found.
   */
  public static final String DELETE_NOT_FOUND = "delete-404";

  /**
   * Number of delete requests that failed with code 409 Conflict.
   */
  public static final String DELETE_CONFLICT = "delete-409";

  /**
   * Number of delete requests that failed with code 412 Precondition Failed.
   */
  public static final String DELETE_PRECONDITION_FAILED = "delete-412";

  /**
   * Number of delete requests that failed with code 500 Internal Server Error.
   */
  public static final String DELETE_INTERNAL_SERVER_ERROR = "delete-500";

  /**
   * Number of delete requests that failed with code 505 Not Implemented.
   */
  public static final String DELETE_NOT_IMPLEMENTED = "delete-505";

  private final String name;
  private final ConcurrentHashMap stats =
      new ConcurrentHashMap();

  /**
   * Create a new ResourceStats instance with the provided name.
   *
   * @param name The name of this ResourceStats instance, usually it should
   *             be the name of the SCIM resource being served.
   */
  public ResourceStats(final String name) {
    this.name = name;
  }

  /**
   * Increments a single statistical value.
   *
   * @param stat The name of the statistical value to increment.
   */
  void incrementStat(final String stat)
  {
    AtomicLong num = stats.get(stat);
    if(num == null)
    {
      num = new AtomicLong();
      AtomicLong prev = stats.putIfAbsent(stat, num);
      if(prev != null)
      {
        num = prev;
      }
    }
    num.getAndIncrement();
  }

  /**
   * Retrieves a single statistical value.
   *
   * @param stat The name of the statistical value to retrieve.
   * @return The statistical value or 0 if it is not present.
   */
  public long getStat(final String stat)
  {
    AtomicLong i = stats.get(stat);
    if(i != null)
    {
      return i.get();
    }
    return 0;
  }

  /**
   * Retrieves all statistical values that are present.
   *
   * @return All statistical values that are present.
   */
  public Map getStats()
  {
    Map map = new HashMap(stats.size());
    for(Map.Entry entry : stats.entrySet())
    {
      map.put(entry.getKey(), entry.getValue().get());
    }
    return map;
  }

  /**
   * Retrieves the name of this ResourceStats instance, usually the name of
   * the SCIM resource being served.
   *
   * @return The name of this ResourceStats instance, usually the name of
   * the SCIM resource being served.
   */
  public String getName() {
    return name;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy