Package org.talend.esb.sam.agent.lifecycle

Source Code of org.talend.esb.sam.agent.lifecycle.AbstractListenerImpl

/*
* #%L
* Service Activity Monitoring :: Agent
* %%
* Copyright (C) 2011 - 2012 Talend Inc.
* %%
* 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.
* #L%
*/
package org.talend.esb.sam.agent.lifecycle;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Collections;
import java.util.Date;
import java.util.Queue;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.apache.cxf.binding.soap.SoapBinding;
import org.apache.cxf.binding.soap.model.SoapBindingInfo;
import org.apache.cxf.endpoint.Endpoint;
import org.talend.esb.sam.agent.util.Converter;
import org.talend.esb.sam.common.event.Event;
import org.talend.esb.sam.common.event.EventTypeEnum;
import org.talend.esb.sam.common.event.MessageInfo;
import org.talend.esb.sam.common.event.Originator;
import org.talend.esb.sam.common.service.MonitoringService;

/**
* The Class AbstractListenerImpl implementing abstract life cycle for SAM agent event.
*/
public class AbstractListenerImpl {

    private static final Logger LOG = Logger.getLogger(AbstractListenerImpl.class.getName());

    private boolean sendLifecycleEvent;
    private Queue<Event> queue;
    private MonitoringService monitoringServiceClient;

    /**
     * Sets the lifecycle event for sending.
     *
     * @param sendLifecycleEvent the new lifecycle event
     */
    public void setSendLifecycleEvent(boolean sendLifecycleEvent) {
        this.sendLifecycleEvent = sendLifecycleEvent;
    }

    /**
     * Sets the queue.
     *
     * @param queue the new queue
     */
    public void setQueue(Queue<Event> queue) {
        this.queue = queue;
    }

    /**
     * Sets the monitoring service client.
     *
     * @param monitoringServiceClient the new monitoring service client
     */
    public void setMonitoringServiceClient(MonitoringService monitoringServiceClient) {
        this.monitoringServiceClient = monitoringServiceClient;
    }

    /**
     * Process start.
     *
     * @param endpoint the endpoint
     * @param eventType the event type
     */
    protected void processStart(Endpoint endpoint, EventTypeEnum eventType) {
        if (!sendLifecycleEvent) {
            return;
        }

        Event event = createEvent(endpoint, eventType);
        queue.add(event);
    }

    /**
     * Process stop.
     *
     * @param endpoint the endpoint
     * @param eventType the event type
     */
    protected void processStop(Endpoint endpoint, EventTypeEnum eventType) {
        if (!sendLifecycleEvent) {
            return;
        }

        Event event = createEvent(endpoint, eventType);
        monitoringServiceClient.putEvents(Collections.singletonList(event));
        if (LOG.isLoggable(Level.INFO)) {
            LOG.info("Send " + eventType + " event to SAM Server successful!");
        }
    }

    /**
     * Creates the event for endpoint with specific type.
     *
     * @param endpoint the endpoint
     * @param type the type
     * @return the event
     */
    private Event createEvent(Endpoint endpoint, EventTypeEnum type) {

        Event event = new Event();
        MessageInfo messageInfo = new MessageInfo();
        Originator originator = new Originator();
        event.setMessageInfo(messageInfo);
        event.setOriginator(originator);

        Date date = new Date();
        event.setTimestamp(date);
        event.setEventType(type);

        messageInfo.setPortType(
                endpoint.getBinding().getBindingInfo().getService().getInterface().getName().toString());

        String transportType = null;
        if (endpoint.getBinding() instanceof SoapBinding) {
            SoapBinding soapBinding = (SoapBinding)endpoint.getBinding();
            if (soapBinding.getBindingInfo() instanceof SoapBindingInfo) {
                SoapBindingInfo soapBindingInfo = (SoapBindingInfo)soapBinding.getBindingInfo();
                transportType = soapBindingInfo.getTransportURI();
            }
        }
        messageInfo.setTransportType((transportType != null) ? transportType : "Unknown transport type");

        originator.setProcessId(Converter.getPID());
        try {
            InetAddress inetAddress = InetAddress.getLocalHost();
            originator.setIp(inetAddress.getHostAddress());
            originator.setHostname(inetAddress.getHostName());
        } catch (UnknownHostException e) {
            originator.setHostname("Unknown hostname");
            originator.setIp("Unknown ip address");
        }

        String address = endpoint.getEndpointInfo().getAddress();
        event.getCustomInfo().put("address", address);

        return event;
    }
}
TOP

Related Classes of org.talend.esb.sam.agent.lifecycle.AbstractListenerImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.