1 23 24 package org.infoglue.deliver.applications.actions; 25 26 import java.net.InetAddress ; 27 import java.util.ArrayList ; 28 import java.util.Enumeration ; 29 import java.util.List ; 30 import java.util.Map ; 31 32 import javax.servlet.http.HttpServletResponse ; 33 34 import org.apache.log4j.Appender; 35 import org.apache.log4j.Category; 36 import org.apache.log4j.Level; 37 import org.apache.log4j.Logger; 38 import org.apache.log4j.RollingFileAppender; 39 import org.apache.pluto.PortletContainerServices; 40 import org.apache.pluto.portalImpl.services.ServiceManager; 41 import org.apache.pluto.portalImpl.services.portletentityregistry.PortletEntityRegistry; 42 import org.infoglue.cms.applications.common.actions.InfoGlueAbstractAction; 43 import org.infoglue.cms.controllers.kernel.impl.simple.CastorDatabaseService; 44 import org.infoglue.cms.controllers.kernel.impl.simple.ServerNodeController; 45 import org.infoglue.cms.util.CmsPropertyHandler; 46 import org.infoglue.cms.util.CmsSessionContextListener; 47 import org.infoglue.deliver.invokers.ComponentBasedHTMLPageInvoker; 48 import org.infoglue.deliver.portal.ServletConfigContainer; 49 import org.infoglue.deliver.portal.services.PortletEntityRegistryServiceDBImpl; 50 import org.infoglue.deliver.util.CacheController; 51 import org.infoglue.deliver.util.RequestAnalyser; 52 53 61 62 public class ViewApplicationStateAction extends InfoGlueAbstractAction 63 { 64 private List states = new ArrayList (); 65 66 private boolean databaseConnectionOk = false; 67 private boolean applicationSettingsOk = false; 68 private boolean testQueriesOk = false; 69 private boolean diskPermissionOk = false; 70 71 private String cacheName = ""; 72 73 private String className = ""; 74 private String logLevel = ""; 75 76 79 80 public ViewApplicationStateAction() 81 { 82 83 } 84 85 private Category getDeliverCategory() 86 { 87 Enumeration enumeration = Logger.getCurrentCategories(); 88 while(enumeration.hasMoreElements()) 89 { 90 Category category = (Category)enumeration.nextElement(); 91 if(category.getName().equalsIgnoreCase("org.infoglue.deliver")) 92 return category; 93 } 94 95 return null; 96 } 97 98 private Category getCastorJDOCategory() 99 { 100 Enumeration enumeration = Logger.getCurrentCategories(); 101 while(enumeration.hasMoreElements()) 102 { 103 Category category = (Category)enumeration.nextElement(); 104 if(category.getName().equalsIgnoreCase("org.exolab.castor.jdo")) 105 return category; 106 } 107 108 return null; 109 } 110 111 private Category getCategory(String className) 112 { 113 Enumeration enumeration = Logger.getCurrentCategories(); 114 while(enumeration.hasMoreElements()) 115 { 116 Category category = (Category)enumeration.nextElement(); 117 if(category.getName().equalsIgnoreCase(className)) 118 return category; 119 } 120 121 Category category = Category.getInstance(className); 122 123 return category; 124 } 125 126 129 public String doClearCache() throws Exception 130 { 131 if(!ServerNodeController.getController().getIsIPAllowed(this.getRequest())) 132 { 133 this.getResponse().setContentType("text/plain"); 134 this.getResponse().setStatus(HttpServletResponse.SC_FORBIDDEN); 135 this.getResponse().getWriter().println("You have no access to this view - talk to your administrator if you should."); 136 137 return NONE; 138 } 139 140 CacheController.clearCache(cacheName); 141 142 144 return "cleared"; 145 } 146 147 150 public String doSetLogLevel() throws Exception 151 { 152 Level newLevel = Level.ERROR; 153 if(this.logLevel.equalsIgnoreCase("debug")) 154 newLevel = Level.DEBUG; 155 if(this.logLevel.equalsIgnoreCase("info")) 156 newLevel = Level.INFO; 157 else if(this.logLevel.equalsIgnoreCase("warn")) 158 newLevel = Level.WARN; 159 else if(this.logLevel.equalsIgnoreCase("error")) 160 newLevel = Level.ERROR; 161 162 Category category = getCategory(this.className); 163 if(category != null) 164 { 165 category.setLevel(newLevel); 166 167 Enumeration enumeration = Logger.getLogger("org.infoglue.console-debug-dummy").getAllAppenders(); 168 while(enumeration.hasMoreElements()) 169 { 170 Appender appender = (Appender)enumeration.nextElement(); 171 category.addAppender(appender); 172 break; 173 } 174 175 } 176 177 return "cleared"; 178 } 179 180 183 public String doSetLogInfo() throws Exception 184 { 185 CastorDatabaseService.logger.setLevel(Level.INFO); 189 CacheController.logger.setLevel(Level.INFO); 190 getDeliverCategory().setLevel(Level.INFO); 191 getCastorJDOCategory().setLevel(Level.INFO); 192 193 return "cleared"; 194 } 195 196 199 public String doSetLogWarning() throws Exception 200 { 201 CastorDatabaseService.logger.setLevel(Level.WARN); 205 CacheController.logger.setLevel(Level.WARN); 206 getDeliverCategory().setLevel(Level.WARN); 207 getCastorJDOCategory().setLevel(Level.WARN); 208 209 return "cleared"; 210 } 211 212 215 public String doSetLogError() throws Exception 216 { 217 CastorDatabaseService.logger.setLevel(Level.ERROR); 221 CacheController.logger.setLevel(Level.ERROR); 222 getDeliverCategory().setLevel(Level.ERROR); 223 getCastorJDOCategory().setLevel(Level.ERROR); 224 225 return "cleared"; 226 } 227 228 231 public String doClearCaches() throws Exception 232 { 233 if(!ServerNodeController.getController().getIsIPAllowed(this.getRequest())) 234 { 235 this.getResponse().setContentType("text/plain"); 236 this.getResponse().setStatus(HttpServletResponse.SC_FORBIDDEN); 237 this.getResponse().getWriter().println("You have no access to this view - talk to your administrator if you should."); 238 239 return NONE; 240 } 241 242 CacheController.clearCastorCaches(); 243 CacheController.clearCaches(null, null, null); 244 245 return "cleared"; 246 } 247 248 251 public String doClearPortlets() throws Exception 252 { 253 System.out.println("Updating pluto service manager: infoglueAVote"); 254 try 255 { 256 257 String [] svcs = { 259 "org.apache.pluto.portalImpl.services.portletdefinitionregistry.PortletDefinitionRegistryService", 260 "org.apache.pluto.portalImpl.services.portletentityregistry.PortletEntityRegistryService"}; 261 int len = svcs.length; 262 for (int i = 0; i < len; i++) { 263 try { 264 ServiceManager.hotInit(ServletConfigContainer.getContainer().getServletConfig(), svcs[i]); 265 } catch (Throwable e) { 266 String svc = svcs[i].substring(svcs[i].lastIndexOf('.') + 1); 267 String msg = "Initialization of " + svc + " service for hot deployment failed!"; 268 System.out.println(msg); 269 break; 270 } 271 272 try { 273 System.out.println("ServletConfigContainer.getContainer().getServletConfig():" + ServletConfigContainer.getContainer().getServletConfig()); 274 System.out.println("ServletConfigContainer.getContainer().getServletConfig().getServletContext():" + ServletConfigContainer.getContainer().getServletConfig().getServletContext()); 275 System.out.println("svcs[i]:" + svcs[i]); 276 ServiceManager.postHotInit(ServletConfigContainer.getContainer().getServletConfig(), svcs[i]); 277 } catch (Throwable e) { 278 String svc = svcs[i].substring(svcs[i].lastIndexOf('.') + 1); 279 String msg = "Post initialization of " + svc + " service for hot deployment failed!"; 280 System.out.println(msg); 281 break; 282 } 283 } 284 285 286 PortletContainerServices.prepare("infoglueAVote"); 287 ServiceManager.init(ServletConfigContainer.getContainer().getServletConfig()); 288 289 PortletEntityRegistry.load(); 290 291 } catch (Exception e) { 292 e.printStackTrace(); 293 } 294 295 return "cleared"; 296 } 297 298 301 public String doReCache() throws Exception 302 { 303 if(!ServerNodeController.getController().getIsIPAllowed(this.getRequest())) 304 { 305 this.getResponse().setContentType("text/plain"); 306 this.getResponse().setStatus(HttpServletResponse.SC_FORBIDDEN); 307 this.getResponse().getWriter().println("You have no access to this view - talk to your administrator if you should."); 308 309 return NONE; 310 } 311 312 CacheController.cacheCentralCastorCaches(); 313 314 return "cleared"; 315 } 316 317 private List getList(String key, String value) 318 { 319 List list = new ArrayList (); 320 list.add(key); 321 list.add(value); 322 323 return list; 324 } 325 326 public String doGC() throws Exception 327 { 328 if(!ServerNodeController.getController().getIsIPAllowed(this.getRequest())) 329 { 330 this.getResponse().setContentType("text/plain"); 331 this.getResponse().setStatus(HttpServletResponse.SC_FORBIDDEN); 332 this.getResponse().getWriter().println("You have no access to this view - talk to your administrator if you should."); 333 334 return NONE; 335 } 336 337 Runtime.getRuntime().gc(); 338 339 return doExecute(); 340 } 341 342 346 347 public String doExecute() throws Exception 348 { 349 long start = System.currentTimeMillis(); 350 if(!ServerNodeController.getController().getIsIPAllowed(this.getRequest())) 351 { 352 this.getResponse().setContentType("text/plain"); 353 this.getResponse().setStatus(HttpServletResponse.SC_FORBIDDEN); 354 this.getResponse().getWriter().println("You have no access to this view - talk to your administrator if you should."); 355 356 return NONE; 357 } 358 359 String sessionTimeout = CmsPropertyHandler.getSessionTimeout(); 360 if(sessionTimeout == null) 361 sessionTimeout = "1800"; 362 363 states.add(getList("Maximum memory", "" + Runtime.getRuntime().maxMemory() / 1024 / 1024 + " MB")); 364 states.add(getList("Used memory", "" + ((Runtime.getRuntime().totalMemory()- Runtime.getRuntime().freeMemory()) / 1024 / 1024) + " MB")); 365 states.add(getList("Free memory", "" + Runtime.getRuntime().freeMemory() / 1024 / 1024 + " MB")); 366 states.add(getList("Total memory", "" + Runtime.getRuntime().totalMemory() / 1024 / 1024 + " MB")); 367 states.add(getList("Number of sessions", "" + CmsSessionContextListener.getActiveSessions() + "(remains for " + (Integer.parseInt(sessionTimeout) / 60) + " minutes after last request)")); 368 states.add(getList("Number of request being handled now", "" + RequestAnalyser.getRequestAnalyser().getNumberOfCurrentRequests())); 369 372 412 413 415 return "success"; 416 } 417 418 public boolean getIsApplicationSettingsOk() 419 { 420 return applicationSettingsOk; 421 } 422 423 public boolean getIsDatabaseConnectionOk() 424 { 425 return databaseConnectionOk; 426 } 427 428 public boolean getIsDiskPermissionOk() 429 { 430 return diskPermissionOk; 431 } 432 433 public boolean getIsTestQueriesOk() 434 { 435 return testQueriesOk; 436 } 437 438 public Map getCaches() 439 { 440 return CacheController.getCaches(); 441 } 442 443 public Map getEventListeners() 444 { 445 return CacheController.getEventListeners(); 446 } 447 448 public List getStates() 449 { 450 return states; 451 } 452 453 public void setCacheName(String cacheName) 454 { 455 this.cacheName = cacheName; 456 } 457 458 public List getSessionInfoBeanList() 459 { 460 return CmsSessionContextListener.getSessionInfoBeanList(); 461 } 462 463 public String getServerName() 464 { 465 String serverName = "Unknown"; 466 467 try 468 { 469 InetAddress localhost = InetAddress.getLocalHost(); 470 serverName = localhost.getHostName(); 471 } 472 catch(Exception e) 473 { 474 475 } 476 477 return serverName; 478 } 479 480 public void setClassName(String className) { 481 this.className = className; 482 } 483 484 public void setLogLevel(String logLevel) { 485 this.logLevel = logLevel; 486 } 487 } 488 | Popular Tags |