blob: 10bb1ca1c5af186ed1303cc377ed43126f3bf270 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.uima.ducc.ws.registry;
import java.util.ArrayList;
import java.util.Properties;
import org.apache.uima.ducc.common.utils.DuccLogger;
import org.apache.uima.ducc.common.utils.DuccLoggerComponents;
import org.apache.uima.ducc.common.utils.id.DuccId;
import org.apache.uima.ducc.transport.event.sm.IService.ServiceState;
import org.apache.uima.ducc.ws.DuccDataHelper;
public class ServiceInterpreter {
private static DuccLogger duccLogger = DuccLoggerComponents.getWsLogger(ServiceInterpreter.class.getName());
private static DuccId jobid = null;
protected Properties svc;
protected Properties meta;
public ServiceInterpreter(Properties propertiesSvc, Properties propertiesMeta) {
setSvc(propertiesSvc);
setMeta(propertiesMeta);
}
public void setSvc(Properties value) {
svc = value;
}
public Properties getSvc() {
return svc;
}
public void setMeta(Properties value) {
meta = value;
}
public Properties getMeta() {
return meta;
}
private static String getUninterpreted(Properties properties, String key) {
String retVal = getValue(properties, key, "");
return retVal;
}
private static String getValue(Properties properties, String key, String defaultValue) {
String retVal = defaultValue;
if(properties != null) {
if(key != null) {
retVal = properties.getProperty(key, defaultValue);
}
}
return retVal.trim();
}
private String placeholderPingerStatus = "";
public String getPingerStatus() {
String location = "getPingerStatus";
String retVal = placeholderPingerStatus;
try {
String state = getState();
retVal = "The service is "+state;
if(state.equalsIgnoreCase(ServiceState.Waiting.name())) {
boolean pingActive = getPingActive();
if(pingActive) {
retVal = "Pinger is running"; // UIMA-4177
}
else {
retVal = "Pinger is not reporting"; // UIMA-4829
}
}
else if(state.equalsIgnoreCase(ServiceState.Available.name())) {
Boolean value = getPingActive();
if(!value) {
retVal = "Pinger is not active";
}
}
}
catch(Exception e) {
duccLogger.debug(location, jobid, e);
}
return retVal;
}
public Boolean getServiceAlive() {
String location = "getServiceAlive";
boolean retVal = true;
try {
String value = getValue(meta,IServicesRegistry.service_alive,Boolean.valueOf(retVal).toString());
retVal = Boolean.valueOf(value);
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
public boolean isServiceAlive() {
return getServiceAlive();
}
public Boolean getServiceHealthy() {
String location = "getServiceHealthy";
boolean retVal = true;
try {
String value = getValue(meta,IServicesRegistry.service_healthy,Boolean.valueOf(retVal).toString());
retVal = Boolean.valueOf(value);
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
public boolean isServiceHealthy() {
return getServiceHealthy();
}
private Integer placeholderId = new Integer(-1);
public Integer getId() {
String location = "getId";
Integer retVal = placeholderId;
try {
String value = getValue(meta,IServicesRegistry.numeric_id,"");
int id = Integer.valueOf(value);
retVal = id;
}
catch(Exception e) {
duccLogger.debug(location, jobid, e);
}
return retVal;
}
private String placeholderName = "";
public String getName() {
String location = "getName";
String retVal = placeholderName;
try {
ServiceName serviceName = new ServiceName(getValue(meta,IServicesRegistry.endpoint,""));
String name = serviceName.getNormalized();
retVal = name;
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
public String getState() {
String location = "getState";
String retVal = "";
try {
String state = getValue(meta,IServicesRegistry.service_state,"");
retVal = state;
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
public String getStatistics() {
String location = "getStatistics";
String retVal = "";
try {
String statistics = getValue(meta,IServicesRegistry.service_statistics,"");
retVal = statistics;
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
public Boolean getPingOnly() {
String location = "getPingOnly";
boolean retVal = false;
try {
String value = getValue(meta,IServicesRegistry.ping_only,Boolean.valueOf(retVal).toString());
retVal = Boolean.valueOf(value);
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
public Boolean getPingActive() {
String location = "getPingActive";
boolean retVal = false;
try {
String value = getValue(meta,IServicesRegistry.ping_active,Boolean.valueOf(retVal).toString());
retVal = Boolean.valueOf(value);
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
public Boolean getPingerReportedServiceHealth() {
String location = "getPingerReportedServiceHealth";
boolean retVal = true;
try {
String value = getValue(meta,IServicesRegistry.service_healthy,Boolean.valueOf(retVal).toString());
retVal = Boolean.valueOf(value);
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
public String getServiceClass() {
String location = "getServiceClass";
String retVal = "";
try {
String serviceClass = getValue(meta,IServicesRegistry.service_class,"");
retVal = serviceClass;
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
public String getErrorText() {
String location = "getErrorText";
String retVal = "";
try {
String errorText = getValue(meta,IServicesRegistry.submit_error,"");
retVal = errorText;
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
private Long placeholderLastUse = new Long(-1);
public Long getLastUse() {
String location = "getLastUse";
Long retVal = placeholderLastUse;
try {
String value = getUninterpreted(meta, IServicesRegistry.last_use);
retVal = Long.parseLong(value);
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
private Long placeholderInstances = new Long(-1);
public Long getInstances() {
String location = "getInstances";
Long retVal = placeholderInstances;
try {
String value = getUninterpreted(meta, IServicesRegistry.instances);
retVal = Long.parseLong(value);
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
public ArrayList<String> getImplementors() {
String location = "getImplementors";
ArrayList<String> retVal = new ArrayList<String>();
try {
// UIMA-4258, use common implementors parser
String[] implementors = DuccDataHelper.parseServiceIds(meta);
for(String implementor : implementors) {
retVal.add(implementor);
}
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
private Long placeholderDeployments = new Long(-1);
public Long getDeployments() {
String location = "getDeployments";
Long retVal = placeholderDeployments;
try {
ArrayList<String> implementors = getImplementors();
Long deployments = new Long(implementors.size());
retVal = deployments;
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
private String placeholderUser = "";
public String getUser() {
String location = "getUser";
String retVal = placeholderUser;
try {
String user = getValue(meta,IServicesRegistry.user,"");
retVal = user;
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
private String placeholderSchedulingClass = "";
public String getSchedulingClass() {
String location = "getSchedulingClass";
String retVal = placeholderSchedulingClass;
try {
String schedulingClass = getValue(svc,IServicesRegistry.scheduling_class,"");
retVal = schedulingClass;
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
private Long placeholderSize = new Long(-1);
public Long getSize() {
String location = "getSize";
Long retVal = placeholderSize;
String value = "?";
try {
value = getUninterpreted(svc, IServicesRegistry.process_memory_size);
retVal = Long.parseLong(value);
}
catch(Exception e) {
duccLogger.debug(location, jobid, "id:"+getId()+" "+"size:"+value);
}
return retVal;
}
private String placeholderDescription = "";
public String getDescription() {
String location = "getDescription";
String retVal = placeholderDescription;
try {
String description = getValue(svc,IServicesRegistry.description,"");
retVal = description;
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
private Boolean getAutostart() {
String location = "getAutostart";
Boolean retVal = new Boolean(false);
try {
String value = getValue(meta,IServicesRegistry.autostart,"false");
retVal = Boolean.valueOf(value);
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
private boolean isAutostart() {
return getAutostart();
}
private Boolean getReference() {
String location = "getReference";
Boolean retVal = new Boolean(true);
try {
String value = getValue(meta,IServicesRegistry.reference,"true");
retVal = Boolean.valueOf(value);
if(!retVal) {
// Override "Manual" whenever implementors == 0
Boolean implementors = isImplementers();
if(!implementors) {
retVal = new Boolean(true);
}
}
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
private boolean isReference() {
return getReference();
}
private Boolean isImplementers() {
String location = "isImplementers";
Boolean retVal = new Boolean(false);
try {
String value = getValue(meta,IServicesRegistry.implementors,"");
String implementors = value.trim();
if(implementors.length() > 0) {
retVal = new Boolean(true);
}
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
private Boolean getEnabled() {
String location = "getEnabled";
Boolean retVal = new Boolean(true);
try {
String value = getValue(meta,IServicesRegistry.enabled,"true");
retVal = Boolean.valueOf(value);
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
private String placeholderDisableReason = "";
public String getDisableReason() {
String location = "getDisableReason";
String retVal = placeholderDisableReason;
try {
String value = getValue(meta,IServicesRegistry.disable_reason,"");
retVal = value;
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
public enum StartState {
Autostart(),
Reference(),
Manual(),
Stopped(),
Unknown();
private StartState() {
}
}
private int getStateOrdinality() {
String location = "getStateOrdinality";
int retVal = 0;
try {
String state = getState();
ServiceState serviceState = ServiceState.valueOf(state);
retVal = serviceState.ordinality();
}
catch(Exception e) {
duccLogger.error(location, jobid, e);
}
return retVal;
}
public StartState getStartState() {
StartState retVal = StartState.Unknown;
if(isAutostart()) {
retVal = StartState.Autostart;
}
else {
int ordinality = getStateOrdinality();
if(ordinality > 3) {
if(isReference()) {
retVal = StartState.Reference;
}
else {
retVal = StartState.Manual;
}
}
else if(ordinality < 4) {
retVal = StartState.Stopped;
}
}
return retVal;
}
public boolean isDisabled() {
Boolean enabled = getEnabled();
boolean retVal = true;
if(enabled) {
retVal = false;
}
return retVal;
}
}