Пример #1
0
    def test_stack_on_complete_callback(self):
        self.cloudformation.create_stack = Mock(return_value=StatusChanger("CREATE_COMPLETE", 0.1))
        stkr = stacker.Stacker("example", {}, cloudformation=self.cloudformation)

        mem = {"called": False}
        def callback():
            mem["called"] = True

        stkr.setup(on_complete=callback)
        self.assertTrue(mem["called"])
Пример #2
0
 def test_client_error(self):
     error_response = {
         "Error": {
             "Code": "ExampleClientError",
             "Message": "Something happened"
         }
     }
     self.cloudformation.create_stack = Mock(side_effect=botocore.exceptions.ClientError(error_response, "CreateStack"))
     stkr = stacker.Stacker("example", {}, cloudformation=self.cloudformation)
     self.assertFalse(stkr.setup())
Пример #3
0
    def test_bad_coverage_cv(self):
        """test the case where a the input contains a cross validation strategy that fails to cover all
           of the input indices"""

        with self.assertRaises(ValueError):
            stacker.Stacker(first_level_preds=[
                Pipeline([('pca', PCA()),
                          ('dtr', DecisionTreeRegressor(random_state=1))]),
                LinearRegression()
            ],
                            stacker_pred=SVR(),
                            cv_fn=self._bad_cv_fun(),
                            n_jobs=-1)
Пример #4
0
    def test_overfitting_resilience(self):
        """test that the stacker is robust to first level estimators that demonstrate overfitting
           (the stacker is expected to give low weight to the overfitted member)"""

        from sklearn.datasets import load_boston
        X, y = load_boston(return_X_y=True)

        tr, te = self._default_cv_fun().split(X).next()
        X_train, X_test = X[tr], X[te]

        stck = stacker.Stacker(first_level_preds=[
            DecisionTreeRegressor(random_state=1),
            BadPredictor()
        ],
                               stacker_pred=LinearRegression(),
                               cv_fn=self._default_cv_fun(),
                               n_jobs=-1)

        stck.fit(X[tr], y[tr])

        self.assertGreater(abs(stck._stacker_pred.coef_[0]),
                           abs(stck._stacker_pred.coef_[1]))
Пример #5
0
    def test_basic_operation(self):
        """"test basic usage of the stacking ensemble"""

        from sklearn.datasets import load_boston
        X, y = load_boston(return_X_y=True)

        tr, te = self._default_cv_fun().split(X).next()
        X_train, X_test = X[tr], X[te]

        stck = stacker.Stacker(first_level_preds=[
            Pipeline([('pca', PCA()),
                      ('dtr', DecisionTreeRegressor(random_state=1))]),
            LinearRegression()
        ],
                               stacker_pred=SVR(),
                               cv_fn=self._default_cv_fun(),
                               n_jobs=-1)

        stck.fit(X[tr], y[tr])
        y_hat = stck.predict(X[te])
        score = sklearn.metrics.r2_score(y[te], y_hat)

        self.assertGreater(score, 0)
Пример #6
0
def main():
    if not os.environ.get('OS_CEILOMETER_URL'):
        print("ERROR: $OS_CEILOMETER_URL variable not set!")
        print(
            "Use this as an example: OS_CEILOMETER_URL=https://compute.datacentred.io:8777"
        )
        exit(1)

    parser = argparse.ArgumentParser()
    parser.add_argument("stack_id",
                        help="The ID or name of the stack with resources.")
    parser.add_argument("--verbose",
                        help="increase output verbosity",
                        action="store_true")
    args = parser.parse_args()

    verbose = False
    if args.verbose:
        print("INFO: Verbosity turned on.")
        verbose = True

    # get a token
    creds = credentials.Credentials()
    token = creds.get_token()

    # use the token with ceilometer's endpoint
    # NOTE: Sadly, the official client doesn't seem to work with the `limit` parameter.
    # NOTE: Use the new custom class.
    #
    #cclient = ceilometerclient.client.get_client(2,
    #                           os_endpoint=os.environ['OS_CEILOMETER_URL'],
    #                           os_token=token)
    #query_samples = [dict(field='meter', op='eq', value='instance')]
    #print( cclient.samples.list( q=query_samples, limit=1 ) )
    ceilomar = ceilomarius.Ceilomarius(
        api_version=2,
        endpoint=os.environ['OS_CEILOMETER_URL'],
        token=token,
        verbose=verbose)

    stack_id = args.stack_id
    stack = stacker.Stacker()
    resources = stack.get_resources_in_stack(stack_id)
    # stores every meter associated with resources from this stack
    meters_all = dict()
    for res in resources:
        if verbose:
            print("INFO: Retrieved resource: %s" % res)
        meters_all.update(ceilomar.get_meters_for_resource(res, limit=1))
    if verbose:
        for key in meters_all.keys():
            print("INFO: All meters retrieved from the stack:")
            print("INFO: The main key: %s" % key)
            print("INFO: Values for this key:")
            for item in meters_all.get(key):
                print("INFO: counter_name: {}, resource_id: {}, timestamp: {}".
                      format(item.get('counter_name'), item.get('resource_id'),
                             item.get('timestamp')))

    # variables for stats on the number of found meters
    n_required = 0
    n_found = 0
    # read required meters from a file
    with open('required_meters.txt', 'r') as f:
        for line in f:
            meter = line.strip()
            if meter in meters_all:
                for item in meters_all[meter]:
                    print("meter: {meter} -> timestamp: {timestamp}".format(
                        meter=item.get('counter_name'),
                        timestamp=item.get('timestamp')))
                    if verbose:
                        print("INFO: Resource metadata:")
                        print("INFO: {}".format(item.get('resource_metadata')))
                n_found += 1
            n_required += 1

    print("Found {} out of all {} meters!".format(n_found, n_required))
Пример #7
0
 def test_unexpected_status(self):
     self.cloudformation.create_stack = Mock(return_value=StatusChanger("UNEXPECTED", 1))
     stkr = stacker.Stacker("example", {}, cloudformation=self.cloudformation)
     self.assertFalse(stkr.setup())