aboutsummaryrefslogtreecommitdiffstats
path: root/controlloop/common/model-impl/vfc/src/main/java/org/onap/policy/vfc/VFCManager.java
blob: 0aade07446d47cf66f01159badc9b28a9a0cc1a0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*-
 * ============LICENSE_START=======================================================
 * Copyright (C) 2017 Intel Corp. All rights reserved.
 * ================================================================================
 * 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.
 * ============LICENSE_END=========================================================
 */

package org.onap.policy.vfc;

import java.util.HashMap;
import java.util.Map;

import org.onap.policy.vfc.util.Serialization;
import org.onap.policy.rest.RESTManager;
import org.onap.policy.rest.RESTManager.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.gson.JsonSyntaxException;

public final class VFCManager implements Runnable {

    private String vfcUrlBase;
    private String username;
    private String password;
    private VFCRequest vfcRequest;
    private static final Logger logger = LoggerFactory.getLogger(VFCManager.class);
    		
    public VFCManager(VFCRequest request) {
        vfcRequest = request;
        // TODO: Get base URL, username and password from MSB?
        // TODO: Following code is a placeholder, needs to be updated
        setVFCParams("https://", "vfc", "vfc");

    }

    public void setVFCParams(String baseUrl, String name, String pwd) {
        vfcUrlBase = baseUrl + "/api/nslcm/v1";
        username = name;
        password = pwd;
    }

    @Override
    public void run() {

        Map<String, String> headers = new HashMap<String, String>();
        headers.put("Accept", "application/json");

        String vfcUrl = vfcUrlBase + "/ns/" + vfcRequest.nsInstanceId + "/heal";
        Pair<Integer, String> httpDetails = RESTManager.post(vfcUrl, username, password, headers,
                "application/json", Serialization.gsonPretty.toJson(vfcRequest));

        if (httpDetails == null) {
            return;
        }

        if (httpDetails.a == 202) {
            try {
                VFCResponse response = Serialization.gsonPretty.fromJson(httpDetails.b, VFCResponse.class);

                String body = Serialization.gsonPretty.toJson(response);
                logger.debug("Response to VFC Heal post:");
                logger.debug(body);

                String jobId = response.jobId;
                int attemptsLeft = 20;

                String urlGet = vfcUrlBase + "/jobs/" + jobId;
                VFCResponse responseGet = null;

                while (attemptsLeft-- > 0) {

                    Pair<Integer, String> httpDetailsGet = RESTManager.get(urlGet, username, password, headers);
                    responseGet = Serialization.gsonPretty.fromJson(httpDetailsGet.b, VFCResponse.class);
                    body = Serialization.gsonPretty.toJson(responseGet);
                    logger.debug("Response to VFC Heal get:");
                    logger.debug(body);

                    if (httpDetailsGet.a == 200) {
                        if (responseGet.responseDescriptor.status.equalsIgnoreCase("finished") ||
                                responseGet.responseDescriptor.status.equalsIgnoreCase("error")) {
                            logger.debug("VFC Heal Status {}", responseGet.responseDescriptor.status);
                            break;
                        }
                    }
                    Thread.sleep(20000);
                }
                if (attemptsLeft <= 0)
                    logger.debug("VFC timeout. Status: ({})", responseGet.responseDescriptor.status);
            } catch (JsonSyntaxException e) {
                logger.error("Failed to deserialize into VFCResponse {}",e.getLocalizedMessage(),e);
            } catch (InterruptedException e) {
                logger.error("Interrupted exception: {}", e.getLocalizedMessage(), e);
            }
        } else {
            logger.warn("VFC Heal Restcall failed");
        }
    }
}