Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - emilec

Pages: [1]
1
With a recent upgrade to QueueMetrics 12.10.1 I've picked up this error at a few sites.

Code: [Select]
Nov 1, 2012 11:26:58 PM org.apache.jasper.compiler.Compiler generateClass
SEVERE: Error compiling file: /srv/www/tomcat5/base/work/Catalina/localhost/QueueMetrics//org/apache/jsp/frontPageNew_jsp.java     [javac] Compiling 1 source file

/srv/www/tomcat5/base/work/Catalina/localhost/QueueMetrics/org/apache/jsp/frontPageNew_jsp.java:1177: generics are not supported in -source 1.3
(use -source 5 or higher to enable generics)
      TreeSet<Integer> validLabels = new TreeSet<Integer>();
             ^
1 error
Nov 1, 2012 11:26:58 PM org.apache.jasper.compiler.Compiler generateClass
SEVERE: Javac exception
Compile failed; see the compiler error output for details.
[SNIP]

This problem seems specific to Tomcat 5.0. The solution is to edit TOMCAT_HOME/conf/web.xml to set the compiler to 1.5
Code: [Select]
    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
       <init-param>
            <param-name>compilerSourceVM</param-name>
            <param-value>1.5</param-value>
        </init-param>
        <init-param>
            <param-name>compilerTargetVM</param-name>
            <param-value>1.5</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>

More info: http://tech.gaeatimes.com/index.php/archive/how-to-run-javac-15-or-beyond-compiler-for-jsp-compilation-in-tomcat-55-with-generics-enabled-and-other-15-only-features/2/


2
Overview
I've spent a good few months working with the Loway team trying to track down a performance problem in QueueMetrics and it looks like we have finally made a breakthrough. I'm currently testing a "beta" version which is looking to be very promising. I thought I would post some of the history and some of the useful information I've gathered over time. Even though I believe the improvements Loway have made mostly contribute to the overall solution, your Java performance settings play a key role as well.

For simplicity I will be referring to QM as the application. Obviously it is served by Tomcat which uses Java. Between Tomcat and Java is where most of the troubleshooting and setting changes need to happen, but the action of running QM is what causes Tomcat and Java to become unstable.

Typical symptoms I was experiencing were either all or a combination of the following:
1) QueueMetrics GUI becomes terribly slow or inaccessible
2) High CPU usage caused by Java
3) Out of memory errors in catalina.out
4) High run time values recorded in catalina.out
5) XMLRPC queries time out

For a number of clients simply setting up a cron job to restart Tomcat once a day was generally enough to prevent slowdowns from occurring (might still happen once or twice a month). This unfortunately did not work for the larger sites with 400+ agents, where I'd often have to restart Tomcat multiple times during office hours.

Java Visual VM
So where does one start? The first thing you want to do is get your Java Visual VM monitoring working. This is detailed in the QM Advanced Manual: http://www.queuemetrics.com/manuals/QM_AdvancedConfig-chunked/ar01s07.html
The 3 things you want to look at on the Monitor page are:
1) CPU
2) (Memory) Heap
3) (Memory) PermGen

Memory Settings - Heap
After discussion with Loway they require 5/6Mb of RAM in the Heap per agent accessing the GUI. On top of that you need to allow overhead for Java as well as your reporting. At one client site I had about 400 agents. So 400 x 6 = 2400. I'm not sure how much to allocate for reports so I played it safe and rounded up to 4096 as they do pull large reports. You then use this value to set your Xms and Xmx values. You can read how to set them in the QM Manual: http://queuemetrics.com/manuals/QM_UserManual-chunked/ar01s02.html#_understanding_queuemetrics_memory_requirements (I think this section of the manual may need a revisit in terms of memory allocation advice). Loway suggested that I set the Xms and Xmx values the same. Thus I used: -Xms4096M -Xmx4096M. You also want to make sure to add -server as this changes the compiler in Java. Read more here: http://stackoverflow.com/questions/198577/real-differences-between-java-server-and-java-client

Note: Be sure that your memory settings are within the limits of your physical RAM (bearing in mind that your OS and other applications like MySQL also need resources). I have 12GB of RAM in my 400 Agent server of which 8GB is in use (mostly Tomcat and MySQL).

Memory Settings - PermGen
Next thing to look at is PermGen. Often the OutOfMemory events are in fact not from Heap, but PermGen. You might see this in the catalina.out log:
Code: [Select]
Exception in thread "RMI TCP Connection(idle)" java.lang.OutOfMemoryError: PermGen space.I hadn't realised that just like the Heap you can also set the PermGen size. By default this seems to be about 80Mb. I experimented with 256Mb and eventually settled on 512Mb. So add these settings to your config for tomcat:  -XX:PermSize=512M -XX:MaxPermSize=512M. This change made a significant difference to the stability of QM. You can read more about PermGen here: https://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation

Garbage Collection
Next up is Garbage Collection. When you start reading about Garbage Collection there is a lot of information and a lot of it differs between Java versions, so make sure your reading matches your Java version. The default collector in Java 6 is selected based on your hardware and OS, but you can force which collector to use by adjusting your tomcat settings. For single CPU setups use a serial collector:  -XX:+UseSerialGC for multi CPU servers use a parallel (aka throughput collector): -XX:+UseParallelGC.  Before I discovered my PermGen size problem I also tried a concurrent collector: -XX:+UseConcMarkSweepGC. This seems to perform better where PermGen size is limited. Once I increased my PermGen size I went back to UseParallelGC as Loway recommended this. My server has 2 x quad core CPUs with HT, so it makes sense to use it.

While we are talking about GC let's also look at some additional logging you can turn on for GC. You can add the following to your tomcat settings: -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails. This adds additional logging to your catalina.out file. Often when QM was in a hung state I would only see GC log events in catalina.out this generally coincided with Heap being maxed out. Later when I paid more attention to PermGen and CPU I would see the same effects when they were maxed. You can also add settings to alert you when Java runs out of memory. Add the following to tomcat settings: -XX:OnError=/bin/javaerrormailgen.sh -XX:OnOutOfMemoryError=/bin/javaerrormailmem.sh. The scripts can contain anything you like (you could for instance trigger a restart of Tomcat). In my case I just used them to send me email. e.g.
javaerrormailgen.sh
Code: [Select]
#!/bin/sh
#

echo `date` | mail -s "SITENAME Java Error: General" me@domain.com

javaerrormailmem.sh
Code: [Select]
#!/bin/sh
#

echo `date` | mail -s "SITENAME Java Error: OutOfMemory" me@domain.com

You can read more about GC here: http://java.sun.com/performance/reference/whitepapers/6_performance.html and here http://techfeast-hiranya.blogspot.com/2010/11/taming-java-garbage-collector.html

Troubleshooting
Once you have these things in place you can now start monitoring JavaVVM and Tomcat logs and capture details for feedback to Loway. Capturing jstack and jmap is detailed in the same document and the JavaVVM setup, but I will list some changes to these commands which I found worked better.
Code: [Select]
jstack -F -l 21472-F Forces the thread dump. I often found that in a hung state I was unable to get a thread dump without this.
-l Prints a long listing with more info
21472 Is the Java (Tomcat) PID
Code: [Select]
jmap -F -dump:live,format=b,file=heap.bin 21472-F Forces the thread dump.
-dump Dumps into a binary format file called heap.bin. Make sure you have disk space available as this file can get very large. It does compress reasonably well using bz2 if you need to upload it somewhere for Loway.
21472 Is the Java (Tomcat) PID

Note: I have found that both these commands will pause Tomcat while the information is extracted, so running this on a working system will cause it to stop while it executes. Obviously if the system is already hung, it doesn't matter  :P

Once I had a larger PermGen set I did see an improvement in the sense that no longer would QM simply hang, but it would still slow down. This was evident in the JVVM where you could see as PermGen usage climbed so did the CPU. In the past when PermGen was maxed out it would eventually cause QM to become completely unresponsive. Once you have more overhead in PermGen it can actually recover. So better, but not quite fixed

Throughout this process I tested a number of different combination of settings and QM versions from Loway each time sending them back jstack and jmap dumps so they could locate what was slowing things down and make improvements to their code. I'll leave the detailed fix(es) up to Loway to explain (it's Greek to me) but essentially it came down to the handling of unique stings which we slowing down when using the intern() function so they replaced it with ChmInterner (hope I got that right).

Final Settings
For a quick copy and paste here are my final settings for a 400+ Agent server with 2 x Quad CPU and 12GB RAM running Tomcat, MySQL & Apache.

Essentials:
Code: [Select]
-Xms4096M -Xmx4096M -server -XX:+UseParallelGC -XX:PermSize=512M -XX:MaxPermSize=512M
With extra logging, JVVM and Java alerts:
Code: [Select]
-Xms4096M -Xmx4096M -server -Dcom.sun.management.jmxremote.port=9003 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+UseParallelGC -XX:PermSize=512M -XX:MaxPermSize=512M -XX:OnError=/bin/javaerrormailgen.sh -XX:OnOutOfMemoryError=/bin/javaerrormailmem.sh

3
I have a bit of a strange problem where after starting tomcat I then type in the QM URL in my browser and it waits a few minutes before the page actually appears. In the logs I can see it gets to Servlet A01 - Step X3. When the page finally loads it then logs Servlet A01 - Step X5! - 189483 in the catalina.out file. The error gives very little detail. Is there a way I can start QM with more verbose logging to figure out what is timing out?

Code: [Select]
INFO: Server startup in 432 ms
Servlet startup - $Id: K.java,v 1.70 2010/11/25 18:34:59 lenz-mobile Exp $
 *** LOWAY TPF licence: to 'XXXXXX' up to 'Mon Jun 20 00:00:00 SAST 2016'
Data Scad [2016-06-20]: Mon Jun 20 00:00:00 SAST 2016
Data scad:Mon Jun 20 00:00:00 SAST 2016 - Scaduto: 0
Servlet A01 - Step X3

DELAY OCCURS HERE

Servlet A01 - Step X5! - 189483
        java.net.ConnectException: Connection timed out
Absolute path for verbs:  /usr/share/tomcat6/webapps/QueueMetrics/WEB-INF/LVerbs
SMTP: Host[localhost] Auth[false] User[xxxx] Pass[xxxxx]
Start transaction: qm_start
Encoding: UTF-8
*** DBVER:34
*** DBVER:34
*** Esce 3
*** Esce 3
[B0E86FA158B4553EFDF8F999F9E89144] 201206271029 Total run time for verb 'qm_start': 51 ms
[B0E86FA158B4553EFDF8F999F9E89144] 201206271029 Total run time for verb 'qm_start': 51 ms

4
Improving QueueMetrics / qloaderd init script for SUSE systems
« on: June 11, 2012, 16:16:32 »
I'd like to suggest an additional qloaderd init script to be stored in WEB-INF/mysql-utils/qloader/Other-initscripts called qloaderd.suse (or whatever convention you like) for SUSE systems.

In order to link an init script to the correct startup sequence position SUSE requires some additional information in the headers of the init script. Something like this:
Code: [Select]
#
# QLoader startup script for SUSE systems
#
# Please edit the following options in order to use the correct paths.
# $Id: qloaderd,v 1.1 2006/11/22 10:50:16 lenz Exp $
#
### BEGIN INIT INFO
# Provides:       qloaderd
# Required-Start: $network $remote_fs
# Required-Stop:
# Default-Start:  2 3 5
# Default-Stop:
# Description:    Start the Qloader daemon
### END INIT INFO

qloader=/usr/local/qloader/qloader.pl
partition=P001
queuelog=/var/log/asterisk/queue_log
logfile=/var/log/asterisk/qloader.log

[SNIP]

5
I have found that if a call passes through more than one queue you will end up with multiple call recordings with the same Asterisk Call ID. For example:
q84-20120321-083849-1332311914.682792.WAV
q91-20120321-084120-1332311914.682792.WAV
When I then look at the call detail and click on the URL I get the following:
http://172.16.1.1/monitor/2012/03/21/q84-20120321-083849-1332311914.682792.WAV%20/var/www/html/monitor/2012/03/21/q91-20120321-084120-1332311914.682792.WAV

Is there a way to return 2 URLs instead? i.e.
http://172.16.1.1/monitor/2012/03/21/q84-20120321-083849-1332311914.682792.WAV
http://172.16.1.1/monitor/2012/03/21/q91-20120321-084120-1332311914.682792.WAV

6
Improving QueueMetrics / Passwords in arch_users stored in clear text
« on: February 24, 2012, 16:38:45 »
I did send this off to your support as well and am not really satisfied with the response that because LDAP is supported and some people like to see passwords in the clear for recovery it's ok to store passwords in clear text in the database. It's never a good idea to do this and I am sure most of your customers are not using LDAP. Many people use the same password across systems so exposing their QueueMetrics passwords exposes their passwords on other systems. Often it's not even for the sysadmin to know what's peoples passwords are. All they need to be able to do is reset someones password.

I ask you to consider applying a hash to the password to at least make it a bit more challenging to crack. Password recovery could be done by replacing the hash with a blank value from MySQL CLI to login with no password or insert a hash value of a known password.

7
Running QueueMetrics / Setting up Tomcat logrotation on CentOS
« on: February 23, 2012, 14:20:37 »
This details my attempts at setting up logrotation on CentOS 5 for Tomcat when installed from the Loway repo. I believe this is an oversight in the Loway Tomcat deployment and I have created a feature request for this.

If you would like to setup Tomcat logrotation you can do the following:
# vi /etc/logrotate.d/qm-tomcat6
Code: [Select]
/usr/local/queuemetrics/tomcat/logs/*.log {
    notifempty
    copytruncate
    daily
    size=+1024k   
    rotate 10
    compress
    missingok
}

/usr/local/queuemetrics/tomcat/logs/catalina.out {
    notifempty
    copytruncate
    dateext
    daily
    size=+1024k   
    rotate 10
    compress
    missingok
}

If you want to get fancy you can make it take care of cleaning out temp files as well (or just do it from cron as you would normally)
Code: [Select]
/usr/local/queuemetrics/tomcat/logs/catalina.out {
    notifempty
    copytruncate
    dateext
    daily
    size=+1024k
    rotate 10
    compress
    missingok
postrotate
       /bin/nice /usr/bin/find /usr/local/queuemetrics/tomcat/temp -type f -mtime +10 -exec /bin/rm {} \; > /dev/null
    endscript
}

UPDATE: I have subsequently added size=+1024k to my suggestion as this seems to get past the logrotate.conf issues of only rotating logs weekly so you no longer have to follow the steps below (unless you want all your other system logs to rotate daily as well).

I also took some time to delve into the CentOS logrotation settings and would suggest some of the following changes depending on your needs. I found that even if I set the rotation to daily in qm-tomcat6 logrotate.conf overrides it to weekly.
# vi /etc/logrotate.conf
Set weekly to daily
Code: [Select]
# rotate log files daily
daily

Change the backlogs from 4 week to 14 days
Code: [Select]
# keep 14 days worth of backlogs
rotate 14

I like compressed logs
Code: [Select]
# uncomment this if you want your log files compressed
compress

By default logrotation runs at 4am. You can change this by editing /etc/crontab
Set it to 02:02
Code: [Select]
02 2 * * * root run-parts /etc/cron.daily
Additional reading:
http://articles.slicehost.com/2010/6/30/understanding-logrotate-on-centos-part-1
http://articles.slicehost.com/2010/6/30/understanding-logrotate-on-centos-part-2

Comments, suggestions and improvements welcome!  ;D

8
Improving QueueMetrics / Add logrotation file for Tomcat to Loway repo
« on: February 23, 2012, 13:51:26 »
If you install Tomcat from the CentOS repo it creates a logrotation file which will ensure that logs are rotated weekly. If you install Tomcat from the Loway repo no logrotation file is created. I would like to propose creating a /etc/logrotate.d/qm-tomcat6 file which is installed from the Loway Repo. The naming convention follows that of the tomcat init script Loway creates.

The default tomcat file looks as follows:
/etc/logrotate.d/tomcat5
Code: [Select]
/var/log/tomcat5/catalina.out {
    copytruncate
    weekly
    rotate 52
    compress
    missingok
}

I think the log rotation should be a bit more aggressive and can deal with *.log:
/etc/logrotate.d/qm-tomcat6
Code: [Select]
/usr/local/queuemetrics/tomcat/logs/*.log {
    notifempty
    copytruncate
    daily
    size=+1024k
    rotate 10
    compress
    missingok
}

/usr/local/queuemetrics/tomcat/logs/catalina.out {
    notifempty
    copytruncate
    dateext
    daily
    size=+1024k
    rotate 10
    compress
    missingok
}

I have gone through the manual steps to set this up in this thread: http://forum.queuemetrics.com/index.php?topic=1441.0

9
This problem looks very similar to this topic: http://forum.queuemetrics.com/index.php?topic=861.0

When the DB test starts I get the following, which I expect:
Quote
Checking current version of table: 'agenti_noti'   

Error   Java Error: Errore DB: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown column 'aliases' in 'field list' The required database table 'agenti_noti' is missing some fields. Are you updating from a previous version of QM?   

You then get the warning to backup your database
click next
and then wait.
show processlist on mysql cli shows the schema updates taking place.
After about 10-15min the page fails with a java time-out error and offers you the session restart button which takes you back to the dbtest page which again shows

Quote
Checking current version of table: 'agenti_noti'   

Error   Java Error: Errore DB: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown column 'aliases' in 'field list' The required database table 'agenti_noti' is missing some fields. Are you updating from a previous version of QM?   
but this time clicking next immediately returns
Quote
The database upgrade and repair process was terminated successfully.
Below you can find the performed check details:   
Test performed   Test result   
1.6.1S7   Updating QA forms with issue information   Err   

Looking at the mysql bin logs I have:
Quote
CREATE TEMPORARY TABLE temp_513824 ( myInt INT NOT NULL, myStr CHAR(30) NOT NULL )
INSERT INTO temp_513824 ( myInt, myStr ) VALUES ( '', 'x' )
DROP TEMPORARY TABLE `temp_513824` /* generated by server */
ALTER TABLE `queue_log` CHANGE `call_id` `call_id` VARCHAR( 200 ) NOT NULL
ALTER TABLE `queue_log` CHANGE `data2` `data2` VARCHAR( 200 ) NOT NULL
ALTER TABLE `queue_log` CHANGE `data3` `data3` VARCHAR( 200 ) NOT NULL
ALTER TABLE `queue_log` CHANGE `data4` `data4` VARCHAR( 200 ) NOT NULL
UPDATE dbversion SET version_id = 21
CREATE TABLE `export_calls` (`call_id` int(11) NOT NULL auto_increment,`job_id` int(11) default NULL,`call_status` enum('L','C','X','D') default NULL,`ast_uniqueid` varchar(100) default NULL,`sys_dt_creazione` datetime default NULL,`sys_user_creazione` int(11) default '0',`sys_dt_modifica` datetime default NULL,`sys_user_modifica` int(11) default '0',`sys_optilock` int(11) default '0',`ast_queue` varchar(100) default NULL,`ast_timestart` int(10) unsigned default NULL,`ast_waittime` int(10) unsigned default NULL,`ast_talktime` int(10) unsigned default NULL,`ast_agent` varchar(100) default NULL,`ast_caller` varchar(100) default NULL,`ast_callstatus` varchar(10) default NULL,`ast_queuepos` int(10) unsigned default NULL,`ast_disconnection` varchar(100) default NULL,`ast_attempts` int(10) unsigned default NULL,`ast_stints` int(10) unsigned default NULL,`ast_server` varchar(100) default NULL,`ast_ivr` varchar(100) default NULL,`ast_dnis` varchar(100) default NULL,`job_type_code` smallint(6) NOT NULL,`job_param1` varchar(128) NOT NULL,`job_param2` varchar(128) NOT NULL,`job_param3` varchar(128) NOT NULL,PRIMARY KEY  (`call_id`)) ENGINE=MyISAM
CREATE TABLE `export_jobs` (`job_id` int(11) NOT NULL auto_increment,`job_name` varchar(100) NOT NULL,`job_status` varchar(2) NOT NULL,`security_key` varchar(50) NOT NULL,`sys_dt_creazione` datetime NOT NULL,`sys_user_creazione` int(11) NOT NULL,`sys_dt_modifica` datetime NOT NULL,`sys_user_modifica` int(11) NOT NULL,`sys_optilock` int(11) NOT NULL,`job_folder` varchar(200) NOT NULL,`job_class` varchar(100) NOT NULL,`job_params` varchar(200) NOT NULL,PRIMARY KEY  (`job_id`)) ENGINE=MyISAM
UPDATE dbversion SET version_id = 22
ALTER TABLE broadcast_msg ADD  for_agentid   INT( 11 ) NOT NULL AFTER `for_everyone`
UPDATE dbversion SET version_id = 23
CREATE TABLE `qm_tasks` ( `task_id` int(11) NOT NULL auto_increment, `to_user` int(11) NOT NULL, `to_class` int(11) NOT NULL, `task_type` int(11) NOT NULL, `task_status` tinyint(4) NOT NULL, `related_to` int(11) NOT NULL, `refers_to` int(11) NOT NULL, `message` text NOT NULL, `data1` text, `data2` text, `data3` text, `valid_from` datetime NOT NULL, `expires_on` datetime NOT NULL, `processed_on` datetime NOT NULL, `sys_dt_creazione` datetime NOT NULL, `sys_user_creazione` int(11) NOT NULL, `sys_dt_modifica` datetime NOT NULL, `sys_user_modifica` int(11) NOT NULL, `sys_optilock` int(11) NOT NULL, PRIMARY KEY  (`task_id`), KEY `unread_tasks` (`to_user`,`task_status`), KEY `tasks_class` (`to_class`,`task_status`), KEY `ext_reference` (`refers_to`,`task_type`), KEY `my_own` (`sys_user_creazione`)) ENGINE=MyISAM
UPDATE dbversion SET version_id = 24
ALTER TABLE qa_comments ADD  enabled   BOOL NOT NULL DEFAULT '1' AFTER `comment_id`
UPDATE dbversion SET version_id = 25
CREATE TABLE `qa_forms_items_attr` (`attribute_id` INT( 11 ) NOT NULL AUTO_INCREMENT ,`form_id` INT( 11 ) NOT NULL ,`item_code` VARCHAR( 5 ) NOT NULL ,`attr_type` SET( 'rule', 'weight', 'shortcut' ) NOT NULL ,`attr_value` VARCHAR( 256 ) NOT NULL ,`sys_dt_creazione` DATETIME NOT NULL ,`sys_user_creazione` INT( 11 ) NOT NULL ,`sys_dt_modifica` DATETIME NOT NULL ,`sys_user_modifica` INT( 11 ) NOT NULL ,`sys_optilock` INT( 11 ) NOT NULL ,PRIMARY KEY ( `attribute_id` )) ENGINE = MYISAM
UPDATE dbversion SET version_id = 26
ALTER TABLE qm_tasks ADD  notes   TEXT NOT NULL AFTER `data3`
UPDATE dbversion SET version_id = 27
SET @@session.pseudo_thread_id=12/*!*/;
CREATE TEMPORARY TABLE temp_572536 ( myInt INT NOT NULL, myStr CHAR(30) NOT NULL )
INSERT INTO temp_572536 ( myInt, myStr ) VALUES ( '', 'x' )
DROP TEMPORARY TABLE `temp_572536` /* generated by server */
DELIMITER ;
ROLLBACK /* added by mysqlbinlog */;

And in the general log I have:
Quote
SELECT task_id, to_user, to_class, task_type, task_status, related_to, refers_to, message, data1, data2, data3, notes, valid_from, expires_on, processed_on, sys_dt_creazione, sys_user_creazione, sys_dt_modifica, sys_user_modifica, sys_optilock, pID, pFamily FROM qm_tasks WHERE task_type = 101;
ERROR 1054 (42S22): Unknown column 'pID' in 'field list'

I then manually ran
Quote
alter table qm_tasks add column pID varchar(255) DEFAULT NULL;
alter table qm_tasks add column pFamily varchar(255) DEFAULT NULL;
alter table qm_tasks add KEY `pFamily` (`pFamily`,`pID`);

I then restarted the db test and the upgrade continued and completed successfully
Quote
1.6.1S7 Updating QA forms with issue information Ok
1.6.1S7 Adding qa_forms.seckey_queues field Ok
1.6.1S7 Adding call_status.seckey_queues field Ok
1.6.1S8 Adding export_jobs.job_type_code field Ok
1.6.1S8 Removing job_class field in the export_job table Ok
1.6.1S9 Creating agent_history table Ok
1.6.1S9 Creating QA Performance tracker rules table Ok
1.6.1S9 Creating QA Performance tracker rules table Ok
1.6.1S9 Adding pause_codes.isPayable field Ok
1.6.1S9 Creating Payroll agents notes table Ok
1.6.1S10 Adding new events to agent history table Ok
1.6.1S10 Adding qa_perftrack_rules.averaged field Ok
1.6.1S10 Remove the score target in performance tracker rule table Ok
1.7.0MG Adding qa_data.grader_type field Ok
1.7.0MG Fix Payroll Notes table (step 1) Ok
1.7.0MG Fix Payroll Notes table (step 2) Ok
1.7.0 Adding queue_log.data5 field Ok
1.7.0 Creating table ivr Ok
1.7.0 Creating table dnis Ok
1.7.0 QA: Set sectionweights default to 0 Ok
1.7.2 Adding agenti_noti.aliases field Ok
1.7.2 Creating record_tags table Ok





10
MySQL storage and Qloaderd/Uniloader / qloader 1.21?
« on: June 23, 2011, 16:13:40 »
I just downloaded qloader 1.21 from http://www.queuemetrics.com/download/qloaderd-1.21.tar.gz and it contains 1.19.

Any chance you could fix this?

11
Hi

Before in 1.5 when you run a custom report there was a call details button at the bottom which I see has now moved on the custom report page. If I login as admin (Masterkey:Yes) I can click this button, but when I login as a user who has Class:Admin but Masterkey:No this button is grey. What is the security key I need to assign to this user to allow access to the list Call button?

12
Hi

I have just upgraded a client from 1.5.5 to 1.6.0.1. When I now try and make changes to a user and click save I get the following error:
Quote
StandardContext[/QueueMetrics]LowayTransactionController: [D86358B29651FE0968BD494A4BD08E0B] [ERR] -- Inner Exception --
Exception: java.lang.NoSuchMethodError
Error:
java.lang.String.replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;Stack trace:
java.lang.NoSuchMethodError: java.lang.String.replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
        at it.loway.app.queuemetrics.configurazione.cfg2.ptUsers.PTValidateRecord(ptUsers.java:136)
        at it.loway.tpf.transaction.db.PagedTransactor.processEditor(PagedTransactor.java:166)
        at it.loway.tpf.transaction.db.PagedTransactor.PTProcessVerb(PagedTransactor.java:85)
        at it.loway.app.queuemetrics.configurazione.cfg2.ptUsers.doRun(ptUsers.java:60)
        at it.loway.tpf.transaction.servlets.LowayTransactionController.runVerb(LowayTransactionController.java:255)
        at it.loway.tpf.transaction.servlets.LowayTransactionController.serveRequest(LowayTransactionController.java:543)
        at it.loway.tpf.transaction.servlets.LowayTransactionController.serveRequestWrapper(LowayTransactionController.java:365)
        at it.loway.tpf.transaction.servlets.LowayTransactionController.doPost(LowayTransactionController.java:217)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
        at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:162)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
        at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:534)
-- End Inner Exception --

I have cleared out my work directory, have only one instance of QM in webapps and restarted tomcat a number of times. This problem looks similar to this report: http://forum.queuemetrics.com/index.php?topic=464.msg1983#msg1983 Which suggests Java 1.4 might be the issue. I am currently running. 1.4:
Quote
java version "1.4.2_17"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_17-b06)
Java HotSpot(TM) Client VM (build 1.4.2_17-b06, mixed mode)

OS is SLES10 SP x64. Any suggestions?



13
We are using the QueueMetrics login page for agents along with the Asterisk code to log agents in and out of queues. I have 3 sites where agents log out the queue column becomes blank but they still have a green status icon next to them and are not disappearing from the queue. They do however not get calls and asterisk shows that they are not logged into the queue. If you leave things overnight they do eventually disappear. Two of the sites are 1.5.0 and the other is 1.4.7.1. Any thoughts as to what is causing this?

14
When you go to the today view and then select the Agents tab there is a Session and pause durations section. Under that you can click on an agent to see their session for the day up to the current time. Would it be possible to allow an agent to see this information for their agent code when they login to QueueMetrics?

So what I am proposing is either have an additional link when they login like the Show Inbound Calls for Agent XXXX or have a button next to the Unpause button to show them their sessions for the day.

Pages: [1]