/*
* Copyright 2013 Eediom 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 org.araqne.logdb.jmx;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Provides;
import org.araqne.log.api.AbstractLoggerFactory;
import org.araqne.log.api.Logger;
import org.araqne.log.api.LoggerConfigOption;
import org.araqne.log.api.LoggerSpecification;
import org.araqne.log.api.MutableIntegerConfigType;
import org.araqne.log.api.MutableStringConfigType;
@Component(name = "remote-jmx-logger-factory")
@Provides
public class RemoteJmxLoggerFactory extends AbstractLoggerFactory {
@Override
public String getName() {
return "remotejmx";
}
@Override
public List<Locale> getLocales() {
return Arrays.asList(Locale.ENGLISH, Locale.KOREAN, Locale.CHINESE, Locale.JAPANESE);
}
@Override
public String getDisplayGroup(Locale locale) {
return "JMX";
}
@Override
public String getDisplayName(Locale locale) {
if (locale != null && locale.equals(Locale.KOREAN))
return "원격 JMX";
if (locale != null && locale.equals(Locale.CHINESE))
return "远程JMX";
if (locale != null && locale.equals(Locale.JAPANESE))
return "リモートJMX";
return "Remote JMX";
}
@Override
public String getDescription(Locale locale) {
if (locale != null && locale.equals(Locale.KOREAN))
return "RMI 통신을 통해 원격지의 JMX 에이전트를 쿼리합니다.";
if (locale != null && locale.equals(Locale.CHINESE))
return "通过RMI通讯向远程远程JMX代理发送查询。";
if (locale != null && locale.equals(Locale.JAPANESE))
return "RMI通信でリモートJMXエージェントをクエリします。";
return "Query JMX Agent using RMI protocol";
}
@Override
public Collection<LoggerConfigOption> getConfigOptions() {
LoggerConfigOption host = new MutableStringConfigType("host", t("Host address", "호스트 주소", "ホストアドレス", "主机地址"), t(
"Domain name or ip address", "도메인 주소 또는 IP 주소", "ドメインまたはIPアドレス", "域名或IP地址。"), true);
LoggerConfigOption port = new MutableIntegerConfigType("port", t("Port", "포트", "ポート", "端口"), t("RMI port number",
"RMI 포트 주소", "RMIポート番号", "RMI端口"), true);
LoggerConfigOption user = new MutableStringConfigType("user", t("User", "사용자 계정", "アカウント", "账户"), t("RMI account",
"RMI 접속 계정", "RMIアカウント", "连接RMI账户"), true);
LoggerConfigOption password = new MutableStringConfigType("password", t("Password", "암호", "パスワード", "密码"), t(
"RMI password", "RMI 접속 암호", "RMIパスワード", "连接RMI密码"), true);
LoggerConfigOption objName = new MutableStringConfigType("obj_name", t("Object Name", "개체 이름", "オブジェクト名", "对象名称"), t(
"JMX object name", "JMX 개체 이름", "JMXオブジェクト名", "JMX对象名称"), true);
LoggerConfigOption attrNames = new MutableStringConfigType("attr_names", t("Attribute Names", "속성 이름 목록", "属性名リスト",
"属性名称列表"), t("Comma separated attribute names, all attributes by default", "쉼표로 구분되는 속성 이름 목록, 미설정 시 전체 속성 수집",
"コンマで区別される属性名リスト。未設定の場合、全体を収集。", "以逗号分隔的属性名称列表, 未设置时采集全部属性"), false);
return Arrays.asList(host, port, user, password, objName, attrNames);
}
private Map<Locale, String> t(String en, String ko, String jp, String cn) {
Map<Locale, String> m = new HashMap<Locale, String>();
m.put(Locale.ENGLISH, en);
m.put(Locale.KOREAN, ko);
m.put(Locale.JAPANESE, jp);
m.put(Locale.CHINESE, cn);
return m;
}
@Override
protected Logger createLogger(LoggerSpecification spec) {
try {
return new RemoteJmxLogger(spec, this);
} catch (IOException e) {
throw new IllegalStateException("cannot create remote jmx logger", e);
}
}
}