81d35f3ded761f5cf5130de47f0c1c049d359d65
[portal/sdk.git] /
1 /*-
2  * ================================================================================
3  * ECOMP Portal SDK
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ================================================================================
19  */
20 package org.openecomp.portalapp.controller.core;
21
22 import java.io.PrintWriter;
23 import java.util.HashMap;
24 import java.util.LinkedList;
25 import java.util.List;
26 import java.util.Map;
27
28 import javax.servlet.http.HttpServletRequest;
29 import javax.servlet.http.HttpServletResponse;
30
31 import org.apache.jcs.JCS;
32 import org.apache.jcs.admin.CacheRegionInfo;
33 import org.apache.jcs.admin.JCSAdminBean;
34 import org.apache.jcs.engine.behavior.ICacheElement;
35 import org.json.JSONArray;
36 import org.json.JSONObject;
37 import org.openecomp.portalsdk.core.controller.RestrictedBaseController;
38 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
39 import org.openecomp.portalsdk.core.web.support.JsonMessage;
40 import org.springframework.stereotype.Controller;
41 import org.springframework.web.bind.annotation.RequestMapping;
42 import org.springframework.web.bind.annotation.RequestMethod;
43 import org.springframework.web.servlet.ModelAndView;
44
45 import com.fasterxml.jackson.databind.DeserializationFeature;
46 import com.fasterxml.jackson.databind.ObjectMapper;
47 import com.fasterxml.jackson.databind.SerializationFeature;
48
49 @Controller
50 @RequestMapping("/")
51 public class CacheAdminController extends RestrictedBaseController {
52
53         private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(CacheAdminController.class);
54
55         private JCSAdminBean jcsAdminBean = new JCSAdminBean();
56
57         @RequestMapping(value = { "/jcs_admin" }, method = RequestMethod.GET)
58         public ModelAndView cacheAdmin(HttpServletRequest request) {
59                 Map<String, Object> model = new HashMap<String, Object>();
60
61                 model.put("model", getRegions());
62
63                 return new ModelAndView(getViewName(), model);
64         }
65
66         @RequestMapping(value = { "/get_regions" }, method = RequestMethod.GET)
67         public void getRegions(HttpServletRequest request, HttpServletResponse response) {
68                 try {
69                         JsonMessage msg = new JsonMessage(getRegions().toString());
70                         JSONObject j = new JSONObject(msg);
71                         response.getWriter().write(j.toString());
72                 } catch (Exception e) {
73                         logger.error(EELFLoggerDelegate.errorLogger, "getRegions failed", e);
74                 }
75         }
76
77         @RequestMapping(value = { "/jcs_admin/clearRegion" }, method = RequestMethod.GET)
78         public void clearRegion(HttpServletRequest request, HttpServletResponse response) throws Exception {
79                 String cacheName = (String) request.getParameter("cacheName");
80                 clearCacheRegion(cacheName);
81
82                 response.setContentType("application/json");
83                 PrintWriter out = response.getWriter();
84                 out.write(getRegions().toString());
85         }
86
87         @RequestMapping(value = { "/jcs_admin/clearAll" }, method = RequestMethod.GET)
88         public void clearAll(HttpServletRequest request, HttpServletResponse response) throws Exception {
89                 clearAllRegions();
90
91                 response.setContentType("application/json");
92                 PrintWriter out = response.getWriter();
93                 out.write(getRegions().toString());
94         }
95
96         @RequestMapping(value = { "/jcs_admin/clearItem" }, method = RequestMethod.GET)
97         public void clearItem(HttpServletRequest request, HttpServletResponse response) throws Exception {
98                 String keyName = (String) request.getParameter("keyName");
99                 String cacheName = (String) request.getParameter("cacheName");
100                 clearCacheRegionItem(cacheName, keyName);
101
102                 response.setContentType("application/json");
103                 PrintWriter out = response.getWriter();
104                 out.write(getRegions().toString());
105         }
106
107         @RequestMapping(value = { "/jcs_admin/showItemDetails" }, method = RequestMethod.GET)
108         public void showItemDetails(HttpServletRequest request, HttpServletResponse response) throws Exception {
109                 String cacheName = (String) request.getParameter("cacheName");
110                 String keyName = (String) request.getParameter("keyName");
111                 String details = null;
112
113                 try {
114                         details = getItemDetails(cacheName, keyName);
115                 } catch (Exception e) {
116                         details = "There was an error retrieving the region details. Please try again.";
117                         logger.error(EELFLoggerDelegate.errorLogger, "showItemDetails failed for cache name " + cacheName, e);
118                 }
119                 JSONObject j = new JSONObject(details);
120                 response.setContentType("application/json");
121                 // response.setContentType("text/plain");
122                 PrintWriter out = response.getWriter();
123                 out.write(j.toString());
124         }
125
126         @RequestMapping(value = { "/jcs_admin/showRegionDetails" }, method = RequestMethod.GET)
127         public void showRegionDetails(HttpServletRequest request, HttpServletResponse response) throws Exception {
128                 String cacheName = (String) request.getParameter("cacheName");
129                 String details = null;
130                 ObjectMapper mapper = new ObjectMapper();
131                 JSONObject j = null;
132                 try {
133                         details = getRegionStats(cacheName);
134                         JsonMessage msg = new JsonMessage(mapper.writeValueAsString(details));
135                         j = new JSONObject(msg);
136
137                 } catch (Exception e) {
138                         details = "There was an error retrieving the region details. Please try again.";
139                         logger.error(EELFLoggerDelegate.errorLogger, "showRegionDetailed failed for cache name " + cacheName, e);
140                 }
141
142                 response.setContentType("application/json");
143
144                 PrintWriter out = response.getWriter();
145                 // out.write(details);
146                 out.write(j.toString());
147         }
148
149         @SuppressWarnings("unchecked")
150         public JSONArray getRegions() {
151                 LinkedList<CacheRegionInfo> regions = null;
152                 JSONArray ja = new JSONArray();
153                 try {
154                         regions = getJcsAdminBean().buildCacheInfo();
155                         ObjectMapper mapper = new ObjectMapper();
156                         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
157                         mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
158                         for (CacheRegionInfo cri : regions) {
159                                 if (cri.getCache().getCacheName() != null && !cri.getCache().getCacheName().equals("[object Object]")) {
160                                         JSONObject jo = new JSONObject();
161                                         jo.put("cacheName", cri.getCache().getCacheName());
162                                         jo.put("size", cri.getCache().getSize());
163                                         jo.put("byteCount", cri.getByteCount());
164                                         jo.put("status", cri.getStatus());
165                                         jo.put("hitCountRam", cri.getCache().getHitCountRam());
166                                         jo.put("hitCountAux", cri.getCache().getHitCountAux());
167                                         jo.put("missCountNotFound", cri.getCache().getMissCountNotFound());
168                                         jo.put("missCountExpired", cri.getCache().getMissCountExpired());
169                                         jo.put("items",
170                                                         new JSONArray(mapper.writeValueAsString(getRegionItems(cri.getCache().getCacheName()))));
171                                         ja.put(jo);
172                                 }
173                         }
174                 } catch (Exception e) {
175                         logger.error(EELFLoggerDelegate.errorLogger, "getRegions failed", e);
176                 }
177
178                 return ja;
179         }
180
181         private String getRegionStats(String cacheName) throws Exception {
182                 String stats = "";
183
184                 JCS cache = JCS.getInstance(cacheName);
185                 stats = cache.getStats();
186
187                 return stats;
188         }
189
190         private String getItemDetails(String cacheName, String keyName) throws Exception {
191                 String details = "";
192
193                 JCS cache = JCS.getInstance(cacheName);
194                 ICacheElement element = cache.getCacheElement(keyName);
195
196                 if (element != null) {
197                         ObjectMapper mapper = new ObjectMapper();
198                         mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
199                         details = mapper.writeValueAsString(element);
200                 }
201
202                 return details;
203         }
204
205         @SuppressWarnings("rawtypes")
206         private List getRegionItems(String cacheName) {
207                 List items = null;
208
209                 try {
210                         items = getJcsAdminBean().buildElementInfo(cacheName);
211                 } catch (Exception e) {
212                         logger.error(EELFLoggerDelegate.errorLogger, "getRegionItems failed for cache name " + cacheName, e);
213                 }
214                 return items;
215         }
216
217         private void clearAllRegions() {
218                 try {
219                         getJcsAdminBean().clearAllRegions();
220                 } catch (Exception e) {
221                         logger.error(EELFLoggerDelegate.errorLogger, "clearAllRegions faield", e);
222                 }
223         }
224
225         private void clearCacheRegion(String cacheName) {
226                 try {
227                         getJcsAdminBean().clearRegion(cacheName);
228                 } catch (Exception e) {
229                         logger.error(EELFLoggerDelegate.errorLogger, "clearCacheRegion failed for cache name " + cacheName, e);
230                 }
231         }
232
233         private void clearCacheRegionItem(String cacheName, String keyName) {
234                 try {
235                         getJcsAdminBean().removeItem(cacheName, keyName);
236                 } catch (Exception e) {
237                         logger.error(EELFLoggerDelegate.errorLogger, "clearCacheRegionItem failed for key name " + keyName, e);
238                 }
239         }
240
241         public JCSAdminBean getJcsAdminBean() {
242                 return jcsAdminBean;
243         }
244
245         public void setJcsAdminBean(JCSAdminBean jcsAdminBean) {
246                 this.jcsAdminBean = jcsAdminBean;
247         }
248 }