private void updateWorkerDay(ACTION action, String imsi, long startTime, Set days) {
        int oldSize = days.size();
        switch (action) {
            case ADD:
                days.add(startTime);
                break;
            case REMOVE:
                days.remove(startTime);
                break;
        }
        int newSize = days.size();

        if ((oldSize < metrics.daysThreshold ^ newSize < metrics.daysThreshold)
                || (oldSize == metrics.daysThreshold ^ newSize == metrics.daysThreshold)) {
            listener.onChange(imsi, newSize, metrics.daysThreshold);
        }
        if (logger.isInfoEnabled()) {
            if (logger.isDebugEnabled()) {
                StringBuilder sb = new StringBuilder();
                for (Object start : days) {
                    if (start instanceof Long) {
                        String time = TimeUtil.getTime(((Long) start).longValue());
                        time = time.substring(0, time.indexOf(" "));
                        sb.append(time);
                        sb.append(",");
                    }
                }
                logger.info(format("worker days change:imsi:[%s] in [%s~%s] get days:[%s]", imsi, time2HHMMSS(metrics.startOfDay), time2HHMMSS(metrics.endOfDay), sb.toString()));
            } else {
                logger.info(format("worker days change:imsi:[%s],days:[%d]", imsi, newSize));
            }
        }

    }