View Javadoc
1   /*
2    * Copyright (c) 2002-2016, Mairie de Paris
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.plugins.systeminfo.web;
35  
36  import fr.paris.lutece.portal.service.database.AppConnectionService;
37  import fr.paris.lutece.portal.service.datastore.CoreDataKeys;
38  import fr.paris.lutece.portal.service.datastore.DatastoreService;
39  import fr.paris.lutece.portal.service.template.AppTemplateService;
40  import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean;
41  import fr.paris.lutece.util.html.HtmlTemplate;
42  
43  import java.nio.charset.Charset;
44  import java.util.HashMap;
45  import java.util.Properties;
46  
47  import javax.servlet.ServletContext;
48  import javax.servlet.http.HttpServletRequest;
49  
50  public class SystemInfoJspBean extends PluginAdminPageJspBean
51  {
52      // ///////////////////////////////////////////////////////////////////////////////////////
53      // Constants
54  
55      // Right
56      public static final String RIGHT_SYSTEMINFO_MANAGEMENT = "SYSTEMINFO_MANAGEMENT";
57  
58      // Markers
59      private static final String MARK_JAVA_VERSION = "java_version";
60      private static final String MARK_JAVA_VENDOR = "java_vendor";
61      private static final String MARK_JAVA_VM_SPECIFICATION_VERSION = "java_vm_specification_version";
62      private static final String MARK_JAVA_VM_SPECIFICATION_VENDOR = "java_vm_specification_vendor";
63      private static final String MARK_JAVA_VM_SPECIFICATION_NAME = "java_vm_specification_name";
64      private static final String MARK_JAVA_VM_VERSION = "java_vm_version";
65      private static final String MARK_JAVA_VM_VENDOR = "java_vm_vendor";
66      private static final String MARK_JAVA_VM_NAME = "java_vm_name";
67      private static final String MARK_JAVA_VM_DEFAULT_CHARSET = "java_vm_default_charset";
68      private static final String MARK_JAVA_SPECIFICATION_VERSION = "java_specification_version";
69      private static final String MARK_JAVA_SPECIFICATION_VENDOR = "java_specification_vendor";
70      private static final String MARK_JAVA_SPECIFICATION_NAME = "java_specification_name";
71      private static final String MARK_OS_NAME = "os_name";
72      private static final String MARK_OS_VERSION = "os_version";
73      private static final String MARK_TOTAL_MEMORY = "runtime_totalMemory";
74      private static final String MARK_FREE_MEMORY = "runtime_freeMemory";
75      private static final String MARK_MAX_MEMORY = "runtime_maxMemory";
76      private static final String MARK_POOLS_INFOS = "pools_list";
77      private static final String MARK_STARTUP_DATE = "startup_date";
78      private static final String MARK_CONTAINER_INFO = "container_info";
79  
80      // Properties
81      private static final String PROPERTY_JAVA_VERSION = "java.version";
82      private static final String PROPERTY_JAVA_VENDOR = "java.vendor";
83      private static final String PROPERTY_JAVA_VM_SPECIFICATION_VERSION = "java.vm.specification.version";
84      private static final String PROPERTY_JAVA_VM_SPECIFICATION_VENDOR = "java.vm.specification.vendor";
85      private static final String PROPERTY_JAVA_VM_SPECIFICATION_NAME = "java.vm.specification.name";
86      private static final String PROPERTY_JAVA_VM_VERSION = "java.vm.version";
87      private static final String PROPERTY_JAVA_VM_VENDOR = "java.vm.vendor";
88      private static final String PROPERTY_JAVA_VM_NAME = "java.vm.name";
89      private static final String PROPERTY_JAVA_SPECIFICATION_VERSION = "java.specification.version";
90      private static final String PROPERTY_JAVA_SPECIFICATION_VENDOR = "java.specification.vendor";
91      private static final String PROPERTY_JAVA_SPECIFICATION_NAME = "java.specification.name";
92      private static final String PROPERTY_OS_NAME = "os.name";
93      private static final String PROPERTY_OS_VERSION = "os.version";
94  
95      // Templates
96      private static final String TEMPLATE_MANAGE_SYSTEMINFO = "admin/plugins/systeminfo/manage_systeminfo.html";
97  
98      /**
99       * Get informations from system
100      *
101      * @param request
102      *            The Http request
103      * @param application
104      *            The application servlet context
105      * @return the html code of information system
106      */
107     public String getSystemInfo( HttpServletRequest request, ServletContext application )
108     {
109         Properties properties = System.getProperties( );
110 
111         HashMap model = new HashMap( );
112         model.put( MARK_JAVA_VERSION, properties.getProperty( PROPERTY_JAVA_VERSION ) );
113         model.put( MARK_JAVA_VENDOR, properties.getProperty( PROPERTY_JAVA_VENDOR ) );
114         model.put( MARK_JAVA_VM_SPECIFICATION_VERSION, properties.getProperty( PROPERTY_JAVA_VM_SPECIFICATION_VERSION ) );
115         model.put( MARK_JAVA_VM_SPECIFICATION_VENDOR, properties.getProperty( PROPERTY_JAVA_VM_SPECIFICATION_VENDOR ) );
116         model.put( MARK_JAVA_VM_SPECIFICATION_NAME, properties.getProperty( PROPERTY_JAVA_VM_SPECIFICATION_NAME ) );
117         model.put( MARK_JAVA_VM_VERSION, properties.getProperty( PROPERTY_JAVA_VM_VERSION ) );
118         model.put( MARK_JAVA_VM_VENDOR, properties.getProperty( PROPERTY_JAVA_VM_VENDOR ) );
119         model.put( MARK_JAVA_VM_NAME, properties.getProperty( PROPERTY_JAVA_VM_NAME ) );
120         model.put( MARK_JAVA_SPECIFICATION_VERSION, properties.getProperty( PROPERTY_JAVA_SPECIFICATION_VERSION ) );
121         model.put( MARK_JAVA_SPECIFICATION_VENDOR, properties.getProperty( PROPERTY_JAVA_SPECIFICATION_VENDOR ) );
122         model.put( MARK_JAVA_SPECIFICATION_NAME, properties.getProperty( PROPERTY_JAVA_SPECIFICATION_NAME ) );
123         model.put( MARK_OS_NAME, properties.getProperty( PROPERTY_OS_NAME ) );
124         model.put( MARK_OS_VERSION, properties.getProperty( PROPERTY_OS_VERSION ) );
125         model.put( MARK_TOTAL_MEMORY, Runtime.getRuntime( ).totalMemory( ) );
126         model.put( MARK_FREE_MEMORY, Runtime.getRuntime( ).freeMemory( ) );
127         model.put( MARK_MAX_MEMORY, Runtime.getRuntime( ).maxMemory( ) );
128 
129         model.put( MARK_STARTUP_DATE, getStartupDate( ) );
130 
131         model.put( MARK_POOLS_INFOS, AppConnectionService.getPoolManager( ).getPoolsInfos( ) );
132 
133         model.put( MARK_JAVA_VM_DEFAULT_CHARSET, Charset.defaultCharset( ).toString( ) );
134 
135         model.put( MARK_CONTAINER_INFO, application.getServerInfo( ) );
136 
137         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_SYSTEMINFO, getLocale( ), model );
138 
139         return getAdminPage( template.getHtml( ) );
140     }
141 
142     /**
143      * Modification of system memory with a garbage collector
144      * 
145      * @param request
146      *            The Http request
147      * @return The Jsp URL of the process result
148      */
149     public String doGarbageCollector( HttpServletRequest request )
150     {
151         System.gc( );
152 
153         return getHomeUrl( request );
154     }
155 
156     /**
157      * Gets the startup date log
158      * 
159      * @return the startup date log
160      */
161     private String getStartupDate( )
162     {
163         return DatastoreService.getDataValue( CoreDataKeys.KEY_STARTUP_TIME, "" );
164     }
165 }