Xacml PDP Register/Unregister Changes
[policy/xacml-pdp.git] / main / src / main / java / org / onap / policy / pdpx / main / comm / XacmlPdpHeartbeatPublisher.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.enums.PdpState;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29
30 public class XacmlPdpHeartbeatPublisher extends TimerTask {
31
32     private static final Logger LOGGER = LoggerFactory.getLogger(XacmlPdpHeartbeatPublisher.class);
33
34     private TopicSinkClient topicSinkClient;
35     private Timer timer;
36     private XacmlPdpMessage heartbeatMessage;
37     private PdpState pdpState;
38
39     private static volatile  boolean alive = false;
40
41     /**
42      * Constructor for instantiating XacmlPdpHeartbeatPublisher.
43      *
44      * @param state of the PDP
45      * @param topicSinkClient used to send heartbeat message
46      */
47     public XacmlPdpHeartbeatPublisher(TopicSinkClient topicSinkClient, PdpState state) {
48         this.topicSinkClient = topicSinkClient;
49         this.heartbeatMessage = new XacmlPdpMessage();
50         this.pdpState = state;
51         timer = new Timer(false);
52         timer.scheduleAtFixedRate(this, 0, 60000); // time interval temp hard coded now but will be parameterized
53         setAlive(true);
54     }
55
56     @Override
57     public void run() {
58         topicSinkClient.send(heartbeatMessage.formatStatusMessage(pdpState));
59         LOGGER.info("Sending Xacml PDP heartbeat to the PAP");
60     }
61
62     /**
63      * Method to terminate the heartbeat.
64      */
65     public void terminate() {
66         timer.cancel();
67         timer.purge();
68         setAlive(false);
69     }
70
71     public void updateInternalState(PdpState state) {
72         this.pdpState = state;
73     }
74
75     public static boolean isAlive() {
76         return alive;
77     }
78
79     public void setAlive(boolean alive) {
80         this.alive = alive;
81     }
82
83 }