The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Net::AppDynamics::REST - AppDynamics AnyEvent Friendly REST Client

SYNOPSIS

  use Net::AppDynamics::REST;
  use AnyEvent;

  my $cv=AnyEvent->condvar;
  my $obj=Net::AppDynamics::REST->new(PASS=>'password',USER=>'Username',SERVER=>'SERVERNAME');

  # to get a list of applications in a non blocking context
  my $resut=$obj->list_applications;

  # get a list of applications in a non blocking context
  $cv->begin;
  $obj->que_list_applications(sub {
    my ($self,$id,$result,$request,$response)=@_;
    $cv->end;
  });
  $obj->agent->run_next;
  $cv->recv;

DESCRIPTION

Appdynamics AnyEvent friendly Rest client.

OO Declarations

Required

  USER: Sets the user appd
  PASS: Sets the password
  SERVER: Sets the server

Optional

  logger: sets the logging object
  CUSTOMER: default customer1
  PORT: default 8090
  PROTO: default http
  use_oauth: 0
    # boolean value when set to true, the PASS option is assumed to be required for OAUTH.
  cache_max_age: how long to keep the cache for in seconds
    default value is 3600
  agent: Gets/Sets the AnyEvent::HTTP::MultiGet object we will use
  oauth_slack: 10
    # how much slack we give oauth before we regenerate our token

For Internal use

  data_cache: Data structure used to cache object resolion
  cache_check: boolean value, if true a cache check is in progress
  backlog array ref of post oauth requests to run
  token current auth token structure

Moo::Roles

This module makes use of the following roles: HTTP::MultiGet::Role, Log::LogMethods and Data::Result::Moo

NonBlocking interfaces

All methods with a prefix of que_xxx are considered non blocking interfaces.

Default Callback arguments:

  my $code=sub {
    # 0: this Net::AppDynamics::REST Object
    # 1: id, for internal use
    # 2: Data::Result Final object ( if failed, it will say why it failed )
    # 3: HTTP::Request Last Object|undef
    # 4: HTTP::Response Last Object|undef
    my ($self,$id,$result,$request,$response)=@_;
  };

Blocking Interfaces

All interfaces that are prefixed with que_xxx have a corisponding blocking method that is simply the xxx portion of the method name.

Example Non Blocking version of que_list_applicatinos:

  my $result->list_applicatinos();

When called without the que context the methods provides the more traditional blocking style inteface. When called in a blocking context only the Data::Result Object is returned.

Application Model API

Listing Applications

  • Blocking context my $result=$self->list_applications

    Returns a Data::Result object, when true it contains the Listing of Applications, when false it contains why it failed.

  • Non Blocking context my $id=$self->que_list_applications($cb)

    Queues a requst to fetch the list of all applications.

    Example Callback:

      my $cb=sub {
        my ($self,$id,$result,$request,$response)=@_;
        # 0 Net::AppDynamics::REST Object
        # 1 Id of the request
        # 2 Data::Result Object
        # 3 HTTP::Request Object
        # 4 HTTP::Response Object
      };

Getting License Rules

  • Non Blocking my $result=$self->que_get_license_rules($cb,%args);

    Queues a request to fetch license rules

    Example Callback:

      my $cb=sub {
        my ($self,$id,$result,$request,$response)=@_;
        # 0 Net::AppDynamics::REST Object
        # 1 Id of the request
        # 2 Data::Result Object
        # 3 HTTP::Request Object
        # 4 HTTP::Response Object
      };

    $result contains the results when true and why it failed when false.

Getting license rule usage

  • Non Blocking my $result=$self->que_get_license_rules_usage($cb,$account_id,$access_key,%args);

    Queues a request to fetch license rules

    Example Callback:

      my $cb=sub {
        my ($self,$id,$result,$request,$response)=@_;
        # 0 Net::AppDynamics::REST Object
        # 1 Id of the request
        # 2 Data::Result Object
        # 3 HTTP::Request Object
        # 4 HTTP::Response Object
      };

    $result contains the results when true and why it failed when false.

Listing Tiers

Each Application can contain many Tiers

  • Blocking context my $result=$self->list_tiers($application);

    Returns a Data::Result Object, when true it contains the Listing of Tiers

  • Non Blocking context my $id=$self->que_list_tiers($cb,$application);

    Queues a request to fetch the list of tiers within a given application.

    Example Callback:

      my $cb=sub {
        my ($self,$id,$result,$request,$response)=@_;
        # 0 Net::AppDynamics::REST Object
        # 1 Id of the request
        # 2 Data::Result Object
        # 3 HTTP::Request Object
        # 4 HTTP::Response Object
      };

Listing Tier Details

  • Blocking context my $result=$self->list_tier($application,$tier);

    Returns a Data::Result object, when true it contains the list of tiers.

  • Non BLocking Context my $id=$self->que_list_tier($cb,$application,$tier);

    Ques a request for the details of the application tier.

    Example Callback:

      my $cb=sub {
        my ($self,$id,$result,$request,$response)=@_;
        # 0 Net::AppDynamics::REST Object
        # 1 Id of the request
        # 2 Data::Result Object
        # 3 HTTP::Request Object
        # 4 HTTP::Response Object
      };

Listing Busuness Transactions

Each Application can contain many business transactions.

  • Blocking context my $result=$self->list_business_transactions($application)

  • Non Blocking context my $id=$self->que_list_business_transactions($cb,$application)

    Queues a request to fetch the list of business transactions for a given application

    Example Callback:

      my $cb=sub {
        my ($self,$id,$result,$request,$response)=@_;
        # 0 Net::AppDynamics::REST Object
        # 1 Id of the request
        # 2 Data::Result Object
        # 3 HTTP::Request Object
        # 4 HTTP::Response Object
      };

List Nodes

Each Application will contain many nodes

  • Blocking context my $result=$self->list_nodes($application)

    Returns a Data::Result object, when true it contains the list of nodes.

  • Non Blocking context my $id=$self->que_list_nodes($cb,$application)

    Ques a request to all the nodes in a given application

    Example Callback:

      my $cb=sub {
        my ($self,$id,$result,$request,$response)=@_;
        # 0 Net::AppDynamics::REST Object
        # 1 Id of the request
        # 2 Data::Result Object
        # 3 HTTP::Request Object
        # 4 HTTP::Response Object
      };

List Tier Nodes

Each Application Tier will contain many nodes

  • Blocking context my $result=$self->list_nodes($application,$tier)

    Returns a Data::Result object, when true it contains the list of nodes.

  • Non Blocking context my $id=$self->que_list_nodes($cb,$application,$tier)

    Ques a request to all the nodes in a given application

    Example Callback:

      my $cb=sub {
        my ($self,$id,$result,$request,$response)=@_;
        # 0 Net::AppDynamics::REST Object
        # 1 Id of the request
        # 2 Data::Result Object
        # 3 HTTP::Request Object
        # 4 HTTP::Response Object
      };

Listing Node Details

  • Blocking context my $id=$self->list_node($application,$node)

    Returns a Data::Result object

  • Non BLocking context my $id=$self->que_list_node($cb,$application,$node)

    Queues a request to list the details of a node in a given tier

    Example Callback:

      my $cb=sub {
        my ($self,$id,$result,$request,$response)=@_;
        # 0 Net::AppDynamics::REST Object
        # 1 Id of the request
        # 2 Data::Result Object
        # 3 HTTP::Request Object
        # 4 HTTP::Response Object
      };

Listing BackEnds

Each application can contain many backends

  • Non Blocking context my $id=$self->que_list_backends($cb,$application)

    Returns a Data::Result Object when true, it contains the list of backends.

  • Non Blocking context my $id=$self->que_list_backends($cb,$application)

    Queues a request to list the backends for a given application

    Example Callback:

      my $cb=sub {
        my ($self,$id,$result,$request,$response)=@_;
        # 0 Net::AppDynamics::REST Object
        # 1 Id of the request
        # 2 Data::Result Object
        # 3 HTTP::Request Object
        # 4 HTTP::Response Object
      };

Walking The entire api

THis method walks all aspects of the appdynamics api and returns a data structure.

The structure of $result->get_data when true contains the following anonymous hash.

Objects are listed by ids

  ids: Anonymous hash of ids to object refrerences

  # keys used to map names to object ids
  applications, business_transactions, tiers, nodes
    Each element contains an anonymous hash of of an array refres
      Each element in the array ref refres back to an ids object.
  • Blocking context my $result=$self->walk_all()

    Reutruns a Data::Result Object

  • Non Blocking context my $id=$self->que_walk_all($cb)

    Queues a request to walk everything.. $cb arguments are different in this caes, $cb is called with the following arguments. Keep in mind this walks every single object in mass and up to 20 requests are run at a time ( by default ), so this can put a strain on your controler if run too often.

      my $cb=sub {
        my ($self,$id,$result,$request,$response,$method,$application)=@_;
        # 0: this Net::AppDynamics::REST Object
        # 1: id, for internal use
        # 2: Data::Result Final object ( if failed, it will say why it failed )
        # 3: HTTP::Request Last Object|undef
        # 4: HTTP::Response Last Object|undef
        # 5: method ( wich method this result set is for ) 
        # 6: application ( undef the method is list_applications )
      };

Alert and Response API

Queues a health rule violation lookup

For more details, please see: https://docs.appdynamics.com/display/PRO43/Alert+and+Respond+API#AlertandRespondAPI-RetrieveAllHealthRuleViolationsinaBusinessApplication

  • Blocking context my $result=$self->health_rule_violations($app,%args);

    Example ( defaults if no arguments are passed ):

      my $result=$self->health_rule_violations($cb,"PRODUCTION",'time-range-type'=>'BEFORE_NOW','duration-in-mins'=>15);
  • Non Blocking context my $id=$self->que_health_rule_violations($cb,$app,%args);

    Example ( defaults if no arguments are passed ):

      my $id=$self->que_health_rule_violations($cb,"PRODUCTION",'time-range-type'=>'BEFORE_NOW','duration-in-mins'=>15);

    Example Callback:

      my $cb=sub {
        my ($self,$id,$result,$request,$response)=@_;
        # 0 Net::AppDynamics::REST Object
        # 1 Id of the request
        # 2 Data::Result Object
        # 3 HTTP::Request Object
        # 4 HTTP::Response Object
      };

Configuration Import and Export API

This section documents the Configuration Import and Export API.

  • Blocking context my $result=$self->export_policies($app)

  • Non Blocking context my $id=$self->que_export_policies($cb,$app)

    Queues the exporting of a policy

    Example Callback:

      my $cb=sub {
        my ($self,$id,$result,$request,$response)=@_;
        # 0 Net::AppDynamics::REST Object
        # 1 Id of the request
        # 2 Data::Result Object
        # 3 HTTP::Request Object
        # 4 HTTP::Response Object
      };

Finding Health rule violations

See: que_health_rule_violations and que_resolve for more information.

  • Blocking Context my $result=$self->find_health_rule_violations($type,$name)

    Returns a Data::Result Object, when true the result will cointain health rules on anything that resolved.

  • Non Blocking Context my $id=$self->que_find_health_rule_violations($cb,$type,$name)

Listing Metrics

Getting Metrics for an Application

  • Non Blocking my $result=$self->que_get_application_metric($cb,$application,,%args);

    Queues a request to fetch a given metric

    Example Callback:

      my $cb=sub {
        my ($self,$id,$result,$request,$response)=@_;
        # 0 Net::AppDynamics::REST Object
        # 1 Id of the request
        # 2 Data::Result Object
        # 3 HTTP::Request Object
        # 4 HTTP::Response Object
      };
  • Blocking my $result=$self->get_application_metric($application,,%args);

    In a blocking context, $result contains the results when true and why it failed when false.

Resolving Objects

Used to resolve tiers, nodes, business_transactions, and applications to thier application's id.

 cb:  standard callback
 type: String representing the typpe of object to resolve (tiers|nodes|business_transactions|applications);
 name: name to be resolved

Uses the internal cache to resolve the object, if the internal cache is out of date or empty the cache will be refreshed.

  • Blocking context my $result=$self->resolve($type,$name);

    Returns a Data::Result object, when true it contains the resolved object.

  • Non Blocking context my $id=$self->que_resolve($cb,$type,$name);

    Example Callback:

      my $cb=sub {
        my ($self,$id,$result,$request,$response)=@_;
        # 0 Net::AppDynamics::REST Object
        # 1 Id of the request
        # 2 Data::Result Object
        # 3 HTTP::Request Object
        # 4 HTTP::Response Object
      };

Internal Caching

The Net::AppDynamics::REST object uses an internal cache for resolving objects. The $forceCacheRefresh is a boolean value, when set to true it forces the cache to refresh reguardless of the age of the cache.

  • Non BLocking context my $result=$self->que_check_cache($cb,$forceCacheRefresh);

    Returns a Data::Result object, when true it contains the cache.

  • BLocking context my $id=$self->que_check_cache($cb,$forceCacheRefresh);

    Queues a cache check. The resolve cache is refreshed if it is too old.

    Example Callback:

      my $cb=sub {
        my ($self,$id,$result,$request,$response)=@_;
        # 0 Net::AppDynamics::REST Object
        # 1 Id of the request
        # 2 Data::Result Object
        # 3 HTTP::Request Object
        # 4 HTTP::Response Object
      };

OO Inernal OO Methods

  • my $url=$self->base_url

    Creates the base url for a request.

  • my $request=$self->create_get($path,%args);

    Create a request object for $path with the required arguments

  • my $request=$self->que_setup_token($cb)

    Runs a non blocking oauth request

        my ($self,$id,$result,$request,$response)=@_;
        # 0 Net::AppDynamics::REST Object
        # 1 Id of the request
        # 2 Data::Result Object
        # 3 HTTP::Request Object
        # 4 HTTP::Response Object
  • my $result=$self->setup_token()

    Runs a blocking oatuh request, reutrns a Data::Result object.

  • \&handle_token_setup

    A Hard code ref used to handle setting up of oauth tokens

  • $self->do_oauth_request($req,$cb)

    Handles the added logic for dealing with blocking and non blocking when oauth mode is inabled.

Bugs and Patches

Please report bugs and submit patches via https://rt.cpan.org

Todo

Implement more of the api.. it is pretty extensive, patches welcome!

See Also

https://docs.appdynamics.com/display/PRO43/AppDynamics+APIs

AnyEvent::HTTP::MultiGet

AUTHOR

Michael Shipper mailto:AKALINUX@CPAN.ORG

1 POD Error

The following errors were encountered while parsing the POD:

Around line 332:

=back without =over