X Tutup
package act; /*- * #%L * ACT Framework * %% * Copyright (C) 2014 - 2017 ActFramework * %% * 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% */ import static act.util.ByteBuffers.wrap; import act.apidoc.Description; import act.app.ActionContext; import act.app.App; import act.cli.Command; import act.handler.NonBlock; import act.inject.param.NoBind; import act.sys.Env; import act.util.Banner; import act.util.JsonView; import com.alibaba.fastjson.JSON; import org.osgl.http.H; import org.osgl.mvc.annotation.GetAction; import org.osgl.util.C; import org.osgl.util.S; import java.nio.ByteBuffer; import java.util.Map; import javax.inject.Inject; import javax.inject.Singleton; @Singleton @SuppressWarnings("unused") public class Info { // a unit of information data @NoBind public static class Unit { private static final String CNT_TXT = H.Format.TXT.contentType(); private static final String CNT_JSON = H.Format.JSON.contentType(); ByteBuffer json; ByteBuffer txt; public Unit(Map data) { this(data, JSON.toJSONString(data)); } public Unit(Map data, String txt) { this.json = wrap(JSON.toJSONString(data)); this.txt = wrap(txt); } public Unit(String name, Object val) { this.json = wrap(JSON.toJSONString(C.Map(name, val))); this.txt = wrap(S.string(val)); } public void applyTo(ActionContext context) { H.Response resp = context.resp(); if (context.acceptJson()) { resp.contentType(CNT_JSON); resp.writeContent(json.duplicate()); } else { resp.contentType(CNT_TXT); resp.writeContent(txt.duplicate()); } } } @NoBind private Map versionData; private Unit info; private Unit pid; private Unit version; @Inject public Info(App app) { init(app); } @GetAction("info") @NonBlock @Description("Show application info including version, scan package, base dir and profile") public void show(ActionContext context) { info.applyTo(context); } @GetAction("pid") @NonBlock @Description("Get process id") public void pid(ActionContext context) { pid.applyTo(context); } @NonBlock @JsonView @GetAction("version") @Description("Get version info in JSON format. This include both application version and actframework version.") public void version(ActionContext context) { version.applyTo(context); } @Command(name = "act.version, act.ver", help = "Print app/actframework version") public Map getVersions() { return versionData; } private void init(App app) { initPidBuffer(); initInfoBuffer(app); initVersion(); } private void initPidBuffer() { this.pid = new Unit("pid", Env.PID.get()); } private void initInfoBuffer(App app) { Map map = C.Map( "actVersion", Act.VERSION.getVersion(), "appVersion", Act.appVersion().getVersion(), "appName", app.name(), "pid", Env.PID.get(), "baseDir", app.base().getAbsoluteFile(), "mode", Act.mode().name(), "profile", Act.profile(), "group", Act.nodeGroup() ); this.info = new Unit(map, Banner.cachedBanner()); } private void initVersion() { versionData = C.Map("act", Act.VERSION, "app", Act.appVersion()); version = new Unit(versionData); } }
X Tutup