glpi-project / glpi

GLPI is a Free Asset and IT Management Software package, Data center management, ITIL Service Desk, licenses tracking and software auditing.
https://glpi-project.org
GNU General Public License v3.0
4.31k stars 1.29k forks source link

Time to Resolve (TTR) field changes automatically to a future date/timestamp without update by an IT agent #16236

Closed pzbdkp closed 8 months ago

pzbdkp commented 11 months ago

Code of Conduct

Is there an existing issue for this?

Version

10.0.10

Bug description

We noticed that the Time to Resolve (TTR) field on a ticket automatically changes after x time to a future date/timestamp then the date/timestamp that was set by an IT agent.

If we check the historical log on that ticket then there is no indication why this change of the Time to Resolve (TTR) field on a ticket occured.

Is this behaviour familiar to someone and how can this be mitigated?

Here some screenshots to show the issue. Time to Resolve (TTR) field of the impacted ticket: GLPI_TTR

Historical with no log that the Time to Resolve (TTR) has changed to a future date/timestamp: GLPI_TTR_historical

Relevant log output

What extra log can I provide?

Page URL

No response

Steps To reproduce

It is not after some steps. It just happens on some of our tickets after x time.

Your GLPI setup information

Information about system installation and configuration
GLPI 10.0.10 ( => /var/www/glpi)
Installation mode: TARBALL
Current language:en_GB

Server
 
Operating system: Linux xxxxxxxxxxxxxxxxx 5.15.0-89-generic #​99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
PHP 8.1.2-1ubuntu2.14 apache2handler (Core, FFI, PDO, Phar, Reflection, SPL, SimpleXML, Zend OPcache, apache2handler, apcu,
    bcmath, bz2, calendar, ctype, curl, date, dom, exif, fileinfo, filter, ftp, gd, gettext, hash, iconv, imap, intl, json, ldap,
    libxml, mbstring, mysqli, mysqlnd, openssl, pcre, pdo_mysql, posix, readline, session, shmop, sockets, sodium, standard,
    sysvmsg, sysvsem, sysvshm, tokenizer, xml, xmlreader, xmlrpc, xmlwriter, xsl, zip, zlib)
Setup: max_execution_time="30" memory_limit="128M" post_max_size="8M" safe_mode="" session.save_handler="files"
    upload_max_filesize="2M" 
Software: Apache/2.4.52 (Ubuntu) (Apache/2.4.52 (Ubuntu) Server at xxxxxxxxxxxxxxxxx Port 443
)
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0
Server Software: (Ubuntu)
    Server Version: 8.0.35-0ubuntu0.22.04.1
    Server SQL Mode: STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    Parameters: glpi@localhost/glpi
    Host info: Localhost via UNIX socket

PHP version (8.1.2-1ubuntu2.14) is supported.
Sessions configuration is OK.
Allocated memory is sufficient.
mysqli extension is installed.
Following extensions are installed: dom, fileinfo, filter, libxml, json, simplexml, xmlreader, xmlwriter.
curl extension is installed.
gd extension is installed.
intl extension is installed.
zlib extension is installed.
The constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES is present.
Database engine version (8.0.35) is supported.
No files from previous GLPI version detected.
The log file has been created successfully.
Write access to /var/www/glpi/files/_cache has been validated.
Write access to /var/www/glpi/config has been validated.
Write access to /var/www/glpi/files/_cron has been validated.
Write access to /var/www/glpi/files has been validated.
Write access to /var/www/glpi/files/_dumps has been validated.
Write access to /var/www/glpi/files/_graphs has been validated.
Write access to /var/www/glpi/files/_lock has been validated.
Write access to /var/www/glpi/files/_pictures has been validated.
Write access to /var/www/glpi/files/_plugins has been validated.
Write access to /var/www/glpi/files/_rss has been validated.
Write access to /var/www/glpi/files/_sessions has been validated.
Write access to /var/www/glpi/files/_tmp has been validated.
Write access to /var/www/glpi/files/_uploads has been validated.

Web server root directory configuration seems safe.
PHP directive "session.cookie_secure" should be set to "on" when GLPI can be accessed on HTTPS protocol.
PHP directive "session.cookie_httponly" should be set to "on" to prevent client-side script to access cookie values.
OS and PHP are relying on 64 bits integers.
exif extension is installed.
ldap extension is installed.
openssl extension is installed.
Following extensions are installed: bz2, Phar, zip.
Zend OPcache extension is installed.
Following extensions are installed: ctype, iconv, mbstring, sodium.
Write access to /var/www/glpi/marketplace has been validated.
Timezones seems loaded in database.

GLPI constants
 
GLPI_ROOT: "/var/www/glpi"
GLPI_CONFIG_DIR: "/var/www/glpi/config"
GLPI_VAR_DIR: "/var/www/glpi/files"
GLPI_MARKETPLACE_DIR: "/var/www/glpi/marketplace"
GLPI_USE_CSRF_CHECK: "1"
GLPI_CSRF_EXPIRES: "7200"
GLPI_CSRF_MAX_TOKENS: "100"
GLPI_USE_IDOR_CHECK: "1"
GLPI_IDOR_EXPIRES: "7200"
GLPI_ALLOW_IFRAME_IN_RICH_TEXT: false
GLPI_SERVERSIDE_URL_ALLOWLIST: ["/^(https?|feed):\\/\\/[^@:]+(\\/.*)?$/"]
GLPI_TELEMETRY_URI: "https://telemetry.glpi-project.org"
GLPI_INSTALL_MODE: "TARBALL"
GLPI_NETWORK_MAIL: "glpi@teclib.com"
GLPI_NETWORK_SERVICES: "https://services.glpi-network.com"
GLPI_MARKETPLACE_ALLOW_OVERRIDE: true
GLPI_MARKETPLACE_MANUAL_DOWNLOADS: true
GLPI_USER_AGENT_EXTRA_COMMENTS: ""
GLPI_DISABLE_ONLY_FULL_GROUP_BY_SQL_MODE: "1"
GLPI_AJAX_DASHBOARD: "1"
GLPI_CALDAV_IMPORT_STATE: 0
GLPI_DEMO_MODE: "0"
GLPI_CENTRAL_WARNINGS: "1"
GLPI_DOC_DIR: "/var/www/glpi/files"
GLPI_CACHE_DIR: "/var/www/glpi/files/_cache"
GLPI_CRON_DIR: "/var/www/glpi/files/_cron"
GLPI_DUMP_DIR: "/var/www/glpi/files/_dumps"
GLPI_GRAPH_DIR: "/var/www/glpi/files/_graphs"
GLPI_LOCAL_I18N_DIR: "/var/www/glpi/files/_locales"
GLPI_LOCK_DIR: "/var/www/glpi/files/_lock"
GLPI_LOG_DIR: "/var/www/glpi/files/_log"
GLPI_PICTURE_DIR: "/var/www/glpi/files/_pictures"
GLPI_PLUGIN_DOC_DIR: "/var/www/glpi/files/_plugins"
GLPI_RSS_DIR: "/var/www/glpi/files/_rss"
GLPI_SESSION_DIR: "/var/www/glpi/files/_sessions"
GLPI_TMP_DIR: "/var/www/glpi/files/_tmp"
GLPI_UPLOAD_DIR: "/var/www/glpi/files/_uploads"
GLPI_INVENTORY_DIR: "/var/www/glpi/files/_inventories"
GLPI_NETWORK_REGISTRATION_API_URL: "https://services.glpi-network.com/api/registration/"
GLPI_MARKETPLACE_PLUGINS_API_URI: "https://services.glpi-network.com/api/marketplace/"
GLPI_I18N_DIR: "/var/www/glpi/locales"
GLPI_VERSION: "10.0.10"
GLPI_SCHEMA_VERSION: "10.0.10"
GLPI_MARKETPLACE_PRERELEASES: false
GLPI_MIN_PHP: "7.4.0"
GLPI_MAX_PHP: "8.4.0"
GLPI_YEAR: "2023"

Libraries
 
htmlawed/htmlawed version 1.2.14 in (/var/www/glpi/vendor/htmlawed/htmlawed)
phpmailer/phpmailer version 6.8.0 in (/var/www/glpi/vendor/phpmailer/phpmailer/src)
simplepie/simplepie version 1.5.8 in (/var/www/glpi/vendor/simplepie/simplepie/library)
tecnickcom/tcpdf version 6.6.2 in (/var/www/glpi/vendor/tecnickcom/tcpdf)
michelf/php-markdown in (/var/www/glpi/vendor/michelf/php-markdown/Michelf)
true/punycode in (/var/www/glpi/vendor/true/punycode/src)
iamcal/lib_autolink in (/var/www/glpi/vendor/iamcal/lib_autolink)
sabre/dav in (/var/www/glpi/vendor/sabre/dav/lib/DAV)
sabre/http in (/var/www/glpi/vendor/sabre/http/lib)
sabre/uri in (/var/www/glpi/vendor/sabre/uri/lib)
sabre/vobject in (/var/www/glpi/vendor/sabre/vobject/lib)
laminas/laminas-i18n in (/var/www/glpi/vendor/laminas/laminas-i18n/src)
laminas/laminas-servicemanager in (/var/www/glpi/vendor/laminas/laminas-servicemanager/src)
monolog/monolog in (/var/www/glpi/vendor/monolog/monolog/src/Monolog)
sebastian/diff in (/var/www/glpi/vendor/sebastian/diff/src)
donatj/phpuseragentparser in (/var/www/glpi/vendor/donatj/phpuseragentparser/src/UserAgent)
elvanto/litemoji in (/var/www/glpi/vendor/elvanto/litemoji/src)
symfony/console in (/var/www/glpi/vendor/symfony/console)
scssphp/scssphp in (/var/www/glpi/vendor/scssphp/scssphp/src)
laminas/laminas-mail in (/var/www/glpi/vendor/laminas/laminas-mail/src/Protocol)
laminas/laminas-mime in (/var/www/glpi/vendor/laminas/laminas-mime/src)
rlanvin/php-rrule in (/var/www/glpi/vendor/rlanvin/php-rrule/src)
ramsey/uuid in (/var/www/glpi/vendor/ramsey/uuid/src)
psr/log in (/var/www/glpi/vendor/psr/log/Psr/Log)
psr/simple-cache in (/var/www/glpi/vendor/psr/simple-cache/src)
psr/cache in (/var/www/glpi/vendor/psr/cache/src)
league/csv in (/var/www/glpi/vendor/league/csv/src)
mexitek/phpcolors in (/var/www/glpi/vendor/mexitek/phpcolors/src/Mexitek/PHPColors)
guzzlehttp/guzzle in (/var/www/glpi/vendor/guzzlehttp/guzzle/src)
guzzlehttp/psr7 in (/var/www/glpi/vendor/guzzlehttp/psr7/src)
glpi-project/inventory_format in (/var/www/glpi/vendor/glpi-project/inventory_format/lib/php)
wapmorgan/unified-archive in (/var/www/glpi/vendor/wapmorgan/unified-archive/src)
paragonie/sodium_compat in (/var/www/glpi/vendor/paragonie/sodium_compat/src)
symfony/cache in (/var/www/glpi/vendor/symfony/cache)
html2text/html2text in (/var/www/glpi/vendor/html2text/html2text/src)
symfony/css-selector in (/var/www/glpi/vendor/symfony/css-selector)
symfony/dom-crawler in (/var/www/glpi/vendor/symfony/dom-crawler)
twig/twig in (/var/www/glpi/vendor/twig/twig/src)
twig/string-extra in (/var/www/glpi/vendor/twig/string-extra)
symfony/polyfill-ctype not found
symfony/polyfill-iconv not found
symfony/polyfill-mbstring not found
symfony/polyfill-php80 not found
symfony/polyfill-php81 not found
symfony/polyfill-php82 in (/var/www/glpi/vendor/symfony/polyfill-php82)
league/oauth2-client in (/var/www/glpi/vendor/league/oauth2-client/src/Provider)
league/oauth2-google in (/var/www/glpi/vendor/league/oauth2-google/src/Provider)
thenetworg/oauth2-azure in (/var/www/glpi/vendor/thenetworg/oauth2-azure/src/Provider)
phpCas version 1.3.8 in (/usr/share/php/CAS/source)

LDAP directories
 
Anonymized

SQL replicas
 
Not active

Notifications
 
Anonymized

Plugins list
 
    behaviors            Name: Behaviours                     Version: 2.7.2      State: Enabled                                 
        Install Method: Marketplace
    datainjection        Name: Data injection                 Version: 2.11.2     State: Not installed                           
        Install Method: Manual
    formcreator          Name: Form Creator                   Version: 2.13.8     State: Enabled                                 
        Install Method: Marketplace

Locales overrides

Anything else?

No response

trasher commented 11 months ago

Please try if you reproduce on latest stable release

pzbdkp commented 11 months ago

Please try if you reproduce on latest stable release

We've already did an upgrade a month ago from 10.0.x to 10.0.10 to solve this issue and it is still present. That is why I've created a bugreport for this issue. What extra log or information is needed to investigate this issue?

pzbdkp commented 9 months ago

Ok, we've updated GLPI to 10.0.12 on 5th of februari.

We've noticed today this problem is still present in the latest version.

TTR on impacted ticket: image

Information in tab historical: image

Notice the difference for TTR between tab historical and actual TTR on ticket. Last change was friday evening, nobody worked this weekend and mondaymorning TTR is changed without a trace...

pzbdkp commented 8 months ago

Do we need to provide some logfiles or what information can assist further to investigate this issue?

cedric-anne commented 8 months ago

The time to resolve is recomputed when the status change from pending to something else, or if a rule changes the SLA value.

pzbdkp commented 8 months ago

Thanks for the reply.

And where can I find the recomputing value for the TTR at status change? Because sometimes TTR changes 1 month into the future and sometimes it is 1 week into the future.

SLA rules are disabled and shouldn't be taken into account.

cedric-anne commented 8 months ago

And where can I find the recomputing value for the TTR at status change? Because sometimes TTR changes 1 month into the future and sometimes it is 1 week into the future.

SLA rules are disabled and shouldn't be taken into account.

Recomputation is done here: https://github.com/glpi-project/glpi/blob/fd2f456c3ba6bed9ca1dd7cf707205128f81db9a/src/CommonITILObject.php#L2352-L2448

pzbdkp commented 8 months ago

Thanks for this.

Is there a reason that a "$delay_time" is added to the TTR?

We want to use the TTR to set a specific date/time and then we need to pick-up that ticket again when TTR is almost due or past due date/time. At this moment we are losing control over those tickets to do the correct follow-up.

Is there a way in the settings to control this recomputation?

cedric-anne commented 8 months ago

Is there a way in the settings to control this recomputation?

No, there is no setting related to this. We consider that this is a normal behaviour. The "waiting" status is made to indicate that you cannot process the ticket because your are waiting for a missing information. If you want your TTR to not be altered, you must not use this state.

I close this ticket as it is not a bug.

github-actions[bot] commented 8 months ago

This issue has been closed as we only track bugs here.

You can open a topic to discuss with community about this enhancement on suggestion website. You can also contact GLPI editor team directly if you are willing to sponsor this feature.

pzbdkp commented 8 months ago

Ok thanks for the clarification. I understand that this isn't a bug and a suggestion.

I want to make a bug out of it because why is this recomputed value not logged in the historical data of a ticket? Then everyone can see when and why the TTR is changed?

cedric-anne commented 8 months ago

Indeed, lack of history when a manually set TTR is updated can be considered as a bug. We should probably add a log entry of HISTORY_LOG_SIMPLE_MESSAGE type, with a messages like TTR has been incremented by the waiting time ($time1 -> $time2).

pzbdkp commented 8 months ago

Thanks! Also nice to have is what exact event that has been triggered to increment the TTR.