// 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( "
" + gte.createMobileTemplate( promptFile + ".html" ).make(["prompt": prompt]).toString() + "" ) 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 = ''' ''' // 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 += """