package net.varkhan.serv.http.servlet; import net.varkhan.base.management.state.health.HealthLevel; import net.varkhan.base.management.state.health.HealthState; import net.varkhan.base.management.state.lifecycle.LifeLevel; import net.varkhan.base.management.state.lifecycle.LifeState; import net.varkhan.core.pres.format.CssFormatter; import net.varkhan.core.pres.format.HtmlFormatter; import net.varkhan.core.pres.widget.menu.*; import net.varkhan.core.pres.widget.page.HtmlWidget; import net.varkhan.core.pres.widget.page.Page; import net.varkhan.serv.Monitored; import net.varkhan.serv.http.page.StateReportPage; import java.io.IOException; import java.util.Map; /** * <b></b>. * <p/> * * @author varkhan * @date 3/17/12 * @time 6:30 PM */ public class AdminServlet extends HtmlMenuServlet { private final Monitored monitored; public AdminServlet(Monitored m) { super( new HtmlWidget<HtmlFormatter,String[],Map<String,String[]>>("home").setName("AdminHome").setTitle("Admin home").setDesc("Administration: Home page"), new Menu<Page<HtmlFormatter,String[],Map<String,String[]>>>(), new HMenuSelectorRenderer<Page<HtmlFormatter,String[],Map<String,String[]>>,Map<String,String[]>>( HMenuSelectorRenderer.Layout.HOVER, new VMenuSelectorRenderer<Page<HtmlFormatter,String[],Map<String,String[]>>, Map<String, String[]>>(VMenuSelectorRenderer.Layout.HOVER) )); monitored=m; StringBuilder buf = new StringBuilder(); CssFormatter css = new CssFormatter(buf); try { css.open(); css.style(".menu"); css.style(".menu.bar","background","#404040","box-shadow","2px 2px 4px #404040","margin","15px","border","1px #D0D0D0 solid"); css.style("TABLE.menu.block","border","0","padding","0","margin","0","border-spacing", "0","background","#404040","color","#D0D0D0"); css.style("TR.menu.block","border","0","padding","0","margin","0"); css.style("TD.menu.block","border","0","padding","0","margin","0"); css.style(".menu.item"); css.style("DIV.menu.item","padding","10px","border-right","1px #D0D0D0 solid","font-weight","bold"); css.style("DIV.menu.item.selected","background","#202020"); css.style("DIV.menu.item A","color","#D0D0D0","text-decoration","none"); css.style(".menu.item:hover A","text-decoration","underline"); css.style(".menu.subs","opacity","0.9","filter","alpha(opacity=90)","box-shadow","2px 2px 4px #404040"); css.style(".menu.subs DIV.menu.item","border","0"); css.style(".menu.page","padding","15px"); css.close(); } catch(IOException e) { /* can't happen */ } page.addLink("cssdef",buf.toString()); HtmlWidget<HtmlFormatter,String[],Map<String,String[]>> stat=new HtmlWidget<HtmlFormatter,String[],Map<String,String[]>>("stat"); stat.setName("AdminStatus"); stat.setTitle("Admin status"); stat.setDesc("Administration: Status report"); menu.addItem(stat, stat.id()); StateReportPage<LifeLevel,LifeState,HtmlFormatter,Map<String,String[]>> status=buildStatusReport(); menu.addItem(status, stat.id(), status.id()); StateReportPage<HealthLevel,HealthState,HtmlFormatter,Map<String,String[]>> health=buildHealthReport(); menu.addItem(health, stat.id(), health.id()); HtmlWidget<HtmlFormatter,String[],Map<String,String[]>> tools=new HtmlWidget<HtmlFormatter,String[],Map<String,String[]>>("tools"); tools.setName("AdminTools"); tools.setTitle("Admin tools"); tools.setDesc("Administration: Tools"); menu.addItem(tools, tools.id()); } private StateReportPage<HealthLevel,HealthState,HtmlFormatter,Map<String,String[]>> buildHealthReport() { StateReportPage<HealthLevel,HealthState,HtmlFormatter,Map<String,String[]>> health=new StateReportPage<HealthLevel,HealthState,HtmlFormatter,Map<String,String[]>>("health",monitored.health()); health.setName("AdminHealthChecks"); health.setTitle("Admin health checks"); health.setDesc("Administration: Health Check reports"); StringBuilder buf = new StringBuilder(); CssFormatter css = new CssFormatter(buf); try { css.open(); css.style("TABLE.state.report","border","1px #D0D0D0 solid","padding","0","margin","0","border-spacing", "0","background","#404040","color","#D0D0D0"); css.style(".state.report TD.global", "padding", "2px", "padding-left", "10px"); css.style(".state.report TD.check", "padding", "2px", "padding-left", "10px"); css.style(".state.report TD.header", "padding", "2px", "padding-left", "10px", "background", "#E0E0E0", "color", "#A0A0A0", "font-weight", "bold"); css.style(".state.report .name", "font-weight", "bold"); css.style(".state.report .state", "font-weight", "bold"); css.style(".state.report .level", "font-weight", "bold"); css.style(".state.report .SYSTEM .level", "color", "slateblue"); css.style(".state.report .MODULE .level", "color", "turquoise"); css.style(".state.report .MAJOR .level", "color", "#202020"); css.style(".state.report .MINOR .level", "color", "#808080"); css.style(".state.report .ADVISORY .level", "color", "#A0A0A0"); css.style(".state.report .RUNNING .state", "color", "forestgreen"); css.style(".state.report .STARTING .state", "color", "goldenrod"); css.style(".state.report .STOPPING .state", "color", "goldenrod"); css.style(".state.report .STOPPED .state", "color", "firebrick"); css.style(".state.report .HEALTHY .state", "color", "forestgreen"); css.style(".state.report .UNSTABLE .state", "color", "goldenrod"); css.style(".state.report .FAILED .state", "color", "firebrick"); css.style(".state.report TR.check.block", "border", "1px #D0D0D0 solid", "background", "#E0E0E0", "color", "#202020"); css.style(".state.report DIV.global", "border", "1px #404040 solid", "background", "#D0D0D0", "color", "#202020"); css.close(); } catch(IOException e) { /* can't happen */ } health.addLink("cssdef",buf.toString()); return health; } protected StateReportPage<LifeLevel,LifeState,HtmlFormatter,Map<String,String[]>> buildStatusReport() { StateReportPage<LifeLevel,LifeState,HtmlFormatter,Map<String,String[]>> life=new StateReportPage<LifeLevel,LifeState,HtmlFormatter,Map<String,String[]>>("life",monitored.status()); life.setName("AdminLifeCycle"); life.setTitle("Admin life cycle"); life.setDesc("Administration: LifeCyle state"); StringBuilder buf = new StringBuilder(); CssFormatter css = new CssFormatter(buf); try { css.open(); css.style("TABLE.state.report","border","1px #D0D0D0 solid","padding","0","margin","0","border-spacing", "0","background","#404040","color","#D0D0D0"); css.style(".state.report TD.global", "padding", "2px", "padding-left", "10px"); css.style(".state.report TD.check", "padding", "2px", "padding-left", "10px"); css.style(".state.report TD.header", "padding", "2px", "padding-left", "10px", "background", "#E0E0E0", "color", "#A0A0A0", "font-weight", "bold"); css.style(".state.report .name", "font-weight", "bold"); css.style(".state.report .state", "font-weight", "bold"); css.style(".state.report .level", "font-weight", "bold"); css.style(".state.report .SYSTEM .level", "color", "slateblue"); css.style(".state.report .MODULE .level", "color", "turquoise"); css.style(".state.report .MAJOR .level", "color", "#202020"); css.style(".state.report .MINOR .level", "color", "#808080"); css.style(".state.report .ADVISORY .level", "color", "#A0A0A0"); css.style(".state.report .RUNNING .state", "color", "forestgreen"); css.style(".state.report .STARTING .state", "color", "goldenrod"); css.style(".state.report .STOPPING .state", "color", "goldenrod"); css.style(".state.report .STOPPED .state", "color", "firebrick"); css.style(".state.report .HEALTHY .state", "color", "forestgreen"); css.style(".state.report .UNSTABLE .state", "color", "goldenrod"); css.style(".state.report .FAILED .state", "color", "firebrick"); css.style(".state.report TR.check.block", "border", "1px #D0D0D0 solid", "background", "#E0E0E0", "color", "#202020"); css.style(".state.report DIV.global", "border", "1px #404040 solid", "background", "#D0D0D0", "color", "#202020"); css.close(); } catch(IOException e) { /* can't happen */ } life.addLink("cssdef",buf.toString()); return life; } }