      1: <?php
      2: /**
      3:  * Copyright 2012-2014 Rackspace US, Inc.
      4:  *
      5:  * Licensed under the Apache License, Version 2.0 (the "License");
      6:  * you may not use this file except in compliance with the License.
      7:  * You may obtain a copy of the License at
      8:  *
      9:  * http://www.apache.org/licenses/LICENSE-2.0
     10:  *
     11:  * Unless required by applicable law or agreed to in writing, software
     12:  * distributed under the License is distributed on an "AS IS" BASIS,
     13:  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14:  * See the License for the specific language governing permissions and
     15:  * limitations under the License.
     16:  */
     17:
     18: namespace OpenCloud\LoadBalancer\Resource;
     19:
     20: /**
     21:  * Active health monitoring is a technique that uses synthetic transactions
     22:  * executed at periodic intervals to determine the condition of a node. One of
     23:  * the advantages of active health monitoring is that it does not require active
     24:  * transactions to be processed by the load balancer to determine whether or not
     25:  * a node is suitable for handling traffic. Active health monitoring is not
     26:  * applied by default and must be enabled per load balancer.
     27:  *
     28:  * The active health monitor can use one of three types of probes:
     29:  *
     30:  * * connect
     31:  * * HTTP
     32:  * * HTTPS
     33:  *
     34:  * These probes are executed at configured intervals; in the event of a failure,
     35:  * the node status changes to OFFLINE and the node will not receive traffic. If,
     36:  * after running a subsequent test, the probe detects that the node has recovered,
     37:  * then the node's status is changed to ONLINE and it is capable of servicing requests.
     38:  */
     39: class HealthMonitor extends NonIdUriResource
     40: {
     41:     /**
     42:      * Type of the health monitor. Can either be "connect", "HTTP" or "HTTPS"
     43:      *
     44:      * @var string
     45:      */
     46:     public $type;
     47:
     48:     /**
     49:      * The minimum number of seconds to wait before executing the health monitor.
     50:      * Must be a number between 1 and 3600.
     51:      *
     52:      * @var int
     53:      */
     54:     public $delay;
     55:
     56:     /**
     57:      * Maximum number of seconds to wait for a connection to be established
     58:      * before timing out. Must be a number between 1 and 300.
     59:      *
     60:      * @var int
     61:      */
     62:     public $timeout;
     63:
     64:     /**
     65:      * Number of permissible monitor failures before removing a node from rotation.
     66:      * Must be a number between 1 and 10.
     67:      *
     68:      * @var int
     69:      */
     70:     public $attemptsBeforeDeactivation;
     71:
     72:     /**
     73:      * A regular expression that will be used to evaluate the contents of the
     74:      * body of the response.
     75:      *
     76:      * @var string
     77:      */
     78:     public $bodyRegex;
     79:
     80:     /**
     81:      * The name of a host for which the health monitors will check.
     82:      *
     83:      * @var string
     84:      */
     85:     public $hostHeader;
     86:
     87:     /**
     88:      * The HTTP path that will be used in the sample request.
     89:      *
     90:      * @var string
     91:      */
     92:     public $path;
     93:
     94:     /**
     95:      * A regular expression that will be used to evaluate the HTTP status code
     96:      * returned in the response.
     97:      *
     98:      * @var string
     99:      */
    100:     public $statusRegex;
    101:
    102:     protected static $json_name = 'healthMonitor';
    103:     protected static $url_resource = 'healthmonitor';
    104:
    105:     protected $createKeys = array(
    106:         'type',
    107:         'delay',
    108:         'timeout',
    109:         'attemptsBeforeDeactivation',
    110:         'bodyRegex',
    111:         'hostHeader',
    112:         'path',
    113:         'statusRegex'
    114:     );
    115:
    116:     public function create($params = array())
    117:     {
    118:         return $this->update($params);
    119:     }
    120: }
    121: