0dc8bf54b8b1a12b70dd26d28808d015b55fa1c3
[policy/xacml-pdp.git] / main / src / main / java / org / onap / policy / pdpx / main / comm / XacmlPdpHearbeatPublisher.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
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  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.pdpx.main.comm;
22
23 import java.util.Timer;
24 import java.util.TimerTask;
25 import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClient;
26 import org.onap.policy.models.pdp.concepts.PdpStateChange;
27 import org.onap.policy.models.pdp.enums.PdpState;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30
31 public class XacmlPdpHearbeatPublisher extends TimerTask {
32
33     private static final Logger LOGGER = LoggerFactory.getLogger(XacmlPdpHearbeatPublisher.class);
34
35     private Timer timer;
36     private XacmlPdpMessage heartbeatMessage;
37     private Object message;
38     private static TopicSinkClient topicSinkClient;
39     private static volatile  boolean alive = false;
40     public static PdpState pdpState;
41
42
43     /**
44      * Constructor for instantiating XacmlPdpPublisher.
45      *
46      * @param message of the PDP
47      * @param topicSinkClient used to send heartbeat message
48      */
49     public XacmlPdpHearbeatPublisher(TopicSinkClient topicSinkClient, PdpStateChange message) {
50         this.message = message;
51         this.pdpState = message.getState();
52         this.topicSinkClient = topicSinkClient;
53         this.heartbeatMessage = new XacmlPdpMessage();
54         timer = new Timer(false);
55         timer.scheduleAtFixedRate(this, 0, 60000); // time interval temp hard coded now but will be parameterized
56         setAlive(true);
57     }
58
59     @Override
60     public void run() {
61         topicSinkClient.send(heartbeatMessage.formatHeartbeatMessage((PdpStateChange) message));
62         LOGGER.info("Sending Xacml PDP heartbeat to the PAP");
63     }
64
65     /**
66      * Method to terminate the heartbeat.
67      */
68     public void terminate() {
69         timer.cancel();
70         timer.purge();
71         setAlive(false);
72     }
73
74     public void updateInternalState(PdpState state) {
75         ((PdpStateChange) this.message).setState(state);
76         this.pdpState = state;
77     }
78
79     public static boolean isAlive() {
80         return alive;
81     }
82
83     public void setAlive(boolean alive) {
84         this.alive = alive;
85     }
86 }