com.oneops.search.msg.processor.OpsProcMessageProcessor.java Source code

Java tutorial

Introduction

Here is the source code for com.oneops.search.msg.processor.OpsProcMessageProcessor.java

Source

/*******************************************************************************
 *  
 *   Copyright 2015 Walmart, 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.
 *  
 *******************************************************************************/
package com.oneops.search.msg.processor;

import static org.elasticsearch.index.query.QueryBuilders.queryString;

import java.util.Date;
import java.util.List;

import org.apache.commons.httpclient.util.DateUtil;
import org.apache.log4j.Logger;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;

import com.oneops.cms.cm.ops.domain.OpsProcedureState;
import com.oneops.cms.util.CmsConstants;
import com.oneops.search.domain.CmsOpsProcedureSearch;
import com.oneops.search.util.SearchUtil;

public class OpsProcMessageProcessor {

    private static Logger logger = Logger.getLogger(OpsProcMessageProcessor.class);
    private ElasticsearchTemplate template;

    /**
     * 
     * @param procedure
     * @return
     */
    public CmsOpsProcedureSearch processOpsProcMsg(CmsOpsProcedureSearch procedure) {

        CmsOpsProcedureSearch esProcedure = null;
        try {
            esProcedure = fetchprocedureRecord(procedure.getProcedureId());

            if (isFinalState(procedure.getProcedureState().getName())) {

                if (esProcedure != null && OpsProcedureState.canceled.getName()
                        .equalsIgnoreCase(procedure.getProcedureState().getName())) {
                    if (OpsProcedureState.failed.getName()
                            .equalsIgnoreCase(esProcedure.getProcedureState().getName())) {
                        esProcedure.setFailedEndTS(DateUtil.formatDate(new Date(), CmsConstants.SEARCH_TS_PATTERN));
                        double failedDuration = esProcedure.getFailedDuration()
                                + (((SearchUtil.getTimefromDate(esProcedure.getFailedEndTS()))
                                        - (SearchUtil.getTimefromDate(esProcedure.getFailedStartTS()))) / 1000.0);
                        esProcedure.setFailedDuration(Math.round(failedDuration * 1000.0) / 1000.0);
                    }
                } else if (esProcedure != null && OpsProcedureState.complete.getName()
                        .equalsIgnoreCase(procedure.getProcedureState().getName())) {
                    if (OpsProcedureState.active.getName()
                            .equalsIgnoreCase(esProcedure.getProcedureState().getName())) {
                        esProcedure.setActiveEndTS(DateUtil.formatDate(new Date(), CmsConstants.SEARCH_TS_PATTERN));
                        double activeDuration = esProcedure.getActiveDuration()
                                + (((SearchUtil.getTimefromDate((esProcedure.getActiveEndTS())))
                                        - (SearchUtil.getTimefromDate(esProcedure.getActiveStartTS()))) / 1000.0);
                        esProcedure.setActiveDuration(Math.round(activeDuration * 1000.0) / 1000.0);
                    }
                }
                esProcedure.setProcedureState(procedure.getProcedureState());
                esProcedure.setTotalTime(
                        ((System.currentTimeMillis()) - (esProcedure.getCreated().getTime())) / 1000.0);
            } else if (OpsProcedureState.active.getName()
                    .equalsIgnoreCase(procedure.getProcedureState().getName())) {

                if (esProcedure != null) {
                    esProcedure.setActiveStartTS(DateUtil.formatDate(new Date(), CmsConstants.SEARCH_TS_PATTERN));
                    if (OpsProcedureState.failed.getName()
                            .equalsIgnoreCase(esProcedure.getProcedureState().getName())) {
                        esProcedure.setRetryCount(esProcedure.getRetryCount() + 1);
                        esProcedure.setFailedEndTS(DateUtil.formatDate(new Date(), CmsConstants.SEARCH_TS_PATTERN));
                        double failedDuration = esProcedure.getFailedDuration()
                                + (((SearchUtil.getTimefromDate(esProcedure.getFailedEndTS()))
                                        - (SearchUtil.getTimefromDate(esProcedure.getFailedStartTS()))) / 1000.0);
                        esProcedure.setFailedDuration(Math.round(failedDuration * 1000.0) / 1000.0);
                        esProcedure.setProcedureState(procedure.getProcedureState());
                    }
                } else {
                    procedure.setActiveStartTS(DateUtil.formatDate(new Date(), CmsConstants.SEARCH_TS_PATTERN));
                }
            } else if (OpsProcedureState.failed.getName()
                    .equalsIgnoreCase(procedure.getProcedureState().getName())) {
                esProcedure.setFailureCnt(esProcedure.getFailureCnt() + 1);
                esProcedure.setFailedStartTS(DateUtil.formatDate(new Date(), CmsConstants.SEARCH_TS_PATTERN));
                if (OpsProcedureState.active.getName()
                        .equalsIgnoreCase(esProcedure.getProcedureState().getName())) {
                    esProcedure.setActiveEndTS(DateUtil.formatDate(new Date(), CmsConstants.SEARCH_TS_PATTERN));
                    double activeDuration = esProcedure.getActiveDuration()
                            + (((SearchUtil.getTimefromDate((esProcedure.getActiveEndTS())))
                                    - (SearchUtil.getTimefromDate(esProcedure.getActiveStartTS()))) / 1000.0);
                    esProcedure.setActiveDuration(Math.round(activeDuration * 1000.0) / 1000.0);
                }
                esProcedure.setProcedureState(procedure.getProcedureState());
            }
        } catch (Exception e) {
            logger.error("Error in processing ops-procedure message " + e.getMessage());
        }

        return esProcedure != null ? esProcedure : procedure;
    }

    private CmsOpsProcedureSearch fetchprocedureRecord(long procedureId) {
        SearchQuery searchQuery = new NativeSearchQueryBuilder().withTypes("opsprocedure")
                .withQuery(queryString(String.valueOf(procedureId)).field("procedureId")).build();

        List<CmsOpsProcedureSearch> esProcedureList = template.queryForList(searchQuery,
                CmsOpsProcedureSearch.class);
        return !esProcedureList.isEmpty() ? esProcedureList.get(0) : null;
    }

    private boolean isFinalState(String state) {
        return OpsProcedureState.complete.getName().equalsIgnoreCase(state)
                || OpsProcedureState.canceled.getName().equalsIgnoreCase(state);
    }

    public ElasticsearchTemplate getTemplate() {
        return template;
    }

    public void setTemplate(ElasticsearchTemplate template) {
        this.template = template;
    }
}