⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loganalyser.java

📁 dspace 用j2ee架构的一个数字图书馆.开源程序
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                // output the date information if necessary        SimpleDateFormat sdf = new SimpleDateFormat("dd'/'MM'/'yyyy");                if (startDate != null)        {            summary.append("start_date=" + sdf.format(startDate) + "\n");        }        else if (logStartDate != null)        {            summary.append("start_date=" + sdf.format(logStartDate) + "\n");        }                if (endDate != null)        {            summary.append("end_date=" + sdf.format(endDate) + "\n");        }        else if (logEndDate != null)        {            summary.append("end_date=" + sdf.format(logEndDate) + "\n");        }                // write out the archive stats        keys = archiveStats.keySet().iterator();        while (keys.hasNext())        {            String key = (String) keys.next();            summary.append("archive." + key + "=" + archiveStats.get(key) + "\n");        }                // write out the action aggregation results        keys = actionAggregator.keySet().iterator();        while (keys.hasNext())        {            String key = (String) keys.next();            summary.append("action." + key + "=" + actionAggregator.get(key) + "\n");        }                // depending on the config settings for reporting on emails output the        // login information        summary.append("user_email=" + userEmail + "\n");        int address = 1;        keys = userAggregator.keySet().iterator();        // for each email address either write out the address and the count        // or alias it with an "Address X" label, to keep the data confidential        // FIXME: the users reporting should also have a floor value        while (keys.hasNext())        {            String key = (String) keys.next();            summary.append("user.");            if (userEmail.equals("on"))            {                summary.append(key + "=" + userAggregator.get(key) + "\n");            }            else if (userEmail.equals("alias"))            {                summary.append("Address " + Integer.toString(address++) + "=" + userAggregator.get(key) + "\n");            }        }                // FIXME: all values which have floors set should provide an "other"        // record which counts how many other things which didn't make it into        // the listing there are                // output the search word information        summary.append("search_floor=" + searchFloor + "\n");        keys = searchAggregator.keySet().iterator();        while (keys.hasNext())        {            String key = (String) keys.next();            if (((Integer) searchAggregator.get(key)).intValue() >= searchFloor)            {                summary.append("search." + key + "=" + searchAggregator.get(key) + "\n");            }        }                // FIXME: we should do a lot more with the search aggregator        // Possible feature list:        //  - constrain by collection/community perhaps?        //  - we should consider building our own aggregator class which can        //      be full of rich data.  Perhaps this and the Stats class should        //      be the same thing.                // item viewing information        summary.append("item_floor=" + itemFloor + "\n");        summary.append("host_url=" + url + "\n");        summary.append("item_lookup=" + itemLookup + "\n");                // write out the item access information        keys = itemAggregator.keySet().iterator();        while (keys.hasNext())        {            String key = (String) keys.next();            if (((Integer) itemAggregator.get(key)).intValue() >= itemFloor)            {                summary.append("item." + key + "=" + itemAggregator.get(key) + "\n");            }        }                // output the average views per item        if (views > 0)        {            summary.append("avg_item_views=" + views + "\n");        }                // insert the analysis processing time information        Calendar endTime = new GregorianCalendar();        long timeInMillis = (endTime.getTimeInMillis() - startTime.getTimeInMillis());        summary.append("analysis_process_time=" + Long.toString(timeInMillis / 1000) + "\n");                // finally write the string into the output file        try         {            BufferedWriter out = new BufferedWriter(new FileWriter(outFile));            out.write(summary.toString());            out.close();        }         catch (IOException e)         {            System.out.println("Unable to write to output file " + outFile);            System.exit(0);        }                return;    }            /**     * get an array of file objects representing the passed log directory     *      * @param   logDir  the log directory in which to pick up files     *     * @return  an array of file objects representing the given logDir     */    public static File[] getLogFiles(String logDir)    {        // open the log files directory, read in the files, check that they        // match the passed regular expression then analyse the content        File logs = new File(logDir);                // if log dir is not a directory throw and error and exit        if (!logs.isDirectory())        {            System.out.println("Passed log directory is not a directory");            System.exit(0);        }                // get the files in the directory        return logs.listFiles();    }            /**     * set up the regular expressions to be used by this analyser.  Mostly this     * exists to provide a degree of segregation and readability to the code     * and to ensure that you only need to set up the regular expressions to     * be used once     *     * @param   fileTemplate    the regex to be used to identify dspace log files     */    public static void setRegex(String fileTemplate)    {        // build the exclude characters regular expression        StringBuffer charRegEx = new StringBuffer();        charRegEx.append("[");        for (int i = 0; i < excludeChars.size(); i++)        {            charRegEx.append("\\" + (String) excludeChars.get(i));        }        charRegEx.append("]");        excludeCharRX = Pattern.compile(charRegEx.toString());                // regular expression to find handle indicators in strings        handleRX = Pattern.compile("handle=");                // regular expression to find item_id indicators in strings        itemRX = Pattern.compile(",item_id=.*$");                // regular expression to find query indicators in strings        queryRX = Pattern.compile("query=");                // regular expression to find collections in strings        collectionRX = Pattern.compile("collection_id=[0-9]*,");                // regular expression to find communities in strings        communityRX = Pattern.compile("community_id=[0-9]*,");                // regular expression to find search result sets        resultsRX = Pattern.compile(",results=(.*)");                // regular expressions to find single characters anywhere in the string        singleRX = Pattern.compile("( . |^. | .$)");                // set up the standard log file line regular expression        String logLine = "^(\\d\\d\\d\\d-\\d\\d\\-\\d\\d) \\d\\d:\\d\\d:\\d\\d,\\d\\d\\d (\\w+)\\s+\\S+ @ ([^:]+):[^:]+:([^:]+):(.*)";        valid = Pattern.compile(logLine);                // set up the pattern for validating log file names        logRegex = Pattern.compile(fileTemplate);                // set up the pattern for matching any of the query types        StringBuffer typeRXString = new StringBuffer();        typeRXString.append("(");        for (int i = 0; i < excludeTypes.size(); i++)        {            if (i > 0)            {                typeRXString.append("|");            }            typeRXString.append((String) excludeTypes.get(i));        }        typeRXString.append(")");        typeRX = Pattern.compile(typeRXString.toString());                // set up the pattern for matching any of the words to exclude        StringBuffer wordRXString = new StringBuffer();        wordRXString.append("(");        for (int i = 0; i < excludeWords.size(); i++)        {            if (i > 0)            {                wordRXString.append("|");            }            wordRXString.append(" " + (String) excludeWords.get(i) + " ");            wordRXString.append("|");            wordRXString.append("^" + (String) excludeWords.get(i) + " ");            wordRXString.append("|");            wordRXString.append(" " + (String) excludeWords.get(i) + "$");        }        wordRXString.append(")");        wordRX = Pattern.compile(wordRXString.toString());                return;    }            /**     * read in the given config file and populate the class globals     *     * @param   configFile  the config file to read in     */    public static void readConfig(String configFile)        throws IOException    {        // prepare our standard file readers and buffered readers        FileReader fr = null;        BufferedReader br = null;                String record = null;        try         {              fr = new FileReader(configFile);              br = new BufferedReader(fr);        }         catch (IOException e)         {            System.out.println("Failed to read config file");            System.exit(0);        }                 // read in the config file and set up our instance variables        while ((record = br.readLine()) != null)         {            // check to see what kind of line we have            Matcher matchComment = comment.matcher(record);            Matcher matchReal = real.matcher(record);            // if the line is not a comment and is real, read it in            if (!matchComment.matches() && matchReal.matches())            {                // lift the values out of the matcher's result groups                String key = matchReal.group(1).trim();                String value = matchReal.group(2).trim();                                // read the config values into our instance variables (see                 // documentation for more info on config params)                if (key.equals("general.summary"))                {                    actionAggregator.put(value, new Integer(0));                    generalSummary.add(value);                }                                if (key.equals("exclude.word"))                {                    excludeWords.add(value);                }                if (key.equals("exclude.type"))                {                    excludeTypes.add(value);                }                if (key.equals("exclude.character"))                {                    excludeChars.add(value);                }                if (key.equals("item.type"))                {                    itemTypes.add(value);                }                if (key.equals("item.floor"))                {                    itemFloor = Integer.parseInt(value);                }                if (key.equals("search.floor"))                {                    searchFloor = Integer.parseInt(value);                }                if (key.equals("item.lookup"))                {                    itemLookup = Integer.parseInt(value);                }                if (key.equals("user.email"))                {                    userEmail = value;                }                if (key.equals("host.url"))                {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -