123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- // Licensed Materials - Property of IBM
- // BI and PM: Mobile
- // (C) Copyright IBM Corp. 2007, 2012
- // US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
- package processors
- import com.cognos.mobile.common.CMErrors;
- import com.cognos.mobile.common.CMException;
- import com.cognos.mobile.server.core.SCResponse;
- import com.cognos.mobile.xml.XMLHelper;
- import com.cognos.mobile.prompts.Prompt
- import groovy.xml.MarkupBuilder
- import com.cognos.mobile.standardedition.DOM4JUtil
- def dbg = { msg -> VM.log(this.class, VM.SEVERITY_ERROR, msg); }
- def err = { msg -> VM.log(this.class, VM.SEVERITY_ERROR, msg); }
- if (!session.isAdministrator()) { return SCResponse.fromException(new CMException(CMErrors.SERVER_AUTHENTICATION_FAILED, "You must have Server Administator Cognos8 Capability to use this feature.")); }
- switch( path ){
- // view the status log
- case ~/\/admin\/status\/.*/:
- def key
- (path =~ /\/admin\/status\/(.*)/).each{ full, k -> key = k }
- def writer = new StringWriter()
- def xml = new MarkupBuilder(writer)
- xml.msgs{
- status.list(key).each{ rr ->
- msg(rr)
- }
- }
- return writer.toString();
-
- // view the loggers or post messages to the status log
- case ~/\/admin\/status/:
- switch( method ){
- case "post":
- status.log(env["ORIGINAL_REMOTE_ADDR"], request.parameters["msg"].split("\\|\\|"))
- return
-
- default:
- def result = "["
- status.loggers.each{ result += "\"${it}\","}
- result += "]"
- return result
- }
- return "";
-
- case ~/\/admin\/prompts\/(.*)/:
- def promptFile;
- (path =~ /\/admin\/prompts\/(.*)/).each{ full, file -> promptFile = file }
- def prompt = ["id": "someid", "name": "somename"]
- def promptTemplate = DOM4JUtil.read( "<html><head></head><body>" + gte.createMobileTemplate( promptFile + ".html" ).make(["prompt": prompt]).toString() + "</body></html>" )
- def viewer = DOM4JUtil.read(gte.createMobileTemplate("prompt_viewer.html").make(["webRoot": webroot]).toString())
- return DOM4JUtil.prettyPrintAsXHTML(DOM4JUtil.mergeXHTML(viewer, promptTemplate))
- case ~/\/admin\/log/:
- def logFile = new File(scripthome + "../../../../../logs/mob.log")
- def raf = new RandomAccessFile(logFile, "r")
- def buffSize = 50000;
- if(args["buff"] != null ) buffSize = Integer.valueOf(args["buff"])
- if( buffSize < logFile.length()) raf.seek(logFile.length()-buffSize)
- def lines = []
- def result = '''
- <html>
- <head>
- <style>
- .logentry{
- clear: both;
- width: 100%;
- height: 16px;
- }
- .bright {
- background: #F3F3F3;
- }
- .DEBUG{
- color: gray;
- }
- .INFO{
- color: black;
- }
- .WARNING{
- color: orange;
- }
- .ERROR{
- color: red;
- }
- .datetime,
- .thread,
- .level,
- .message,
- .clazz {
- padding: 0px 0 0 3px;
- float: left;
- }
- .thread {
- width: 65px;
- white-space: nowrap;
- overflow: hidden;
- }
- .clazz {
- width: 350px;
- white-space: nowrap;
- overflow: hidden;
- }
- .level {
- width: 58px;
- white-space: nowrap;
- overflow: hidden;
- }
- .datetime {
- width: 145px;
- white-space: nowrap;
- overflow: hidden;
- }
- .message {
- font-weight: bold;
- white-space: pre;
- }
- </style>
-
- </head>
- <body>
- '''
- // datetime, thread, level, class, message
- def pattern = ~/^(.{23}) (\[.+\]) ([A-Z]+) (.+) ?- (.*)$/
- def bright = true;
- def logentry = ""
- def cssclass = "INFO"
- def encodedMessage = "";
-
- while(( line = raf.readLine()) != null ){
- try{
- def m = pattern.matcher(line)
- if( m.matches()){
- cssclass = m[0][3]
- if( bright ){
- logentry = "bright logentry"
- bright = false
- } else {
- logentry = "logentry"
- bright = true;
- }
- encodedMessage = XMLHelper.encodeXml(m[0][5]);
- result +=
- """
- <div class='$logentry $cssclass'>
- <div class='datetime'>${m[0][1]}</div><div class='thread'>${m[0][2]}</div><div class='level'>${m[0][3]}</div><div class='clazz'>${m[0][4]}</div><div class='message'>$encodedMessage</div>
- </div>
- """
- } else {
- line = XMLHelper.encodeXml(line)
- result +=
- """
- <div class='$logentry $cssclass'>
- <div class='datetime'></div><div class='thread'></div><div class='level'></div><div class='clazz'></div><div class='message'>$line</div>
- </div>
- """
- }
- } catch( Exception e ){
- println e
- }
- }
- result += "</body></html>"
- return SCResponse.fromBytes(result.getBytes(), "text/html")
- case ~/\/admin\/clog/:
- def logFile = new File(scripthome + "../../../../../logs/cogserver.log")
- def raf = new RandomAccessFile(logFile, "r")
- def buffSize = 50000;
- if(args["buff"] != null ) buffSize = Integer.valueOf(args["buff"])
- if( buffSize < logFile.length()) raf.seek(logFile.length()-buffSize)
- def lines = []
- def result = '''
- <html><head>
- <style>
- .bright {
- background: #F3F3F3;
- }
- </style>
- </head><body>
- '''
- def bright = true
- def logentry = ""
- while(( line = raf.readLine()) != null ){
- try{
- if( bright ){
- logentry = "bright clogentry"
- bright = false
- } else {
- logentry = "clogentry"
- bright = true
- }
- result += "<div class=\"$logentry\">" + line + "</div>"
- } catch( Exception e ){}
- }
- result += "</body></html>"
- return SCResponse.fromBytes(result.getBytes(), "text/html")
- case ~/\/admin\/init\/handlers/:
- println "resetting handlers..."
- controller.initHandlers()
- controller.listHandlers().each{ item -> println item.name }
- }
- return
|