Commit 04c0f21d authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Amélioration du mouchard : possibilité de filtrer les messages reçus pour éviter les faux positifs.

Quelques améliorations subsidiaires aussi...
parent ee4e212b
Loading
Loading
Loading
Loading
+3 −0
Changes for src/UnicaenApp/Mouchard/MouchardListenerErrorHandler.php: 3 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ class MouchardListenerErrorHandler implements MouchardListenerInterface
    ];

    use MouchardAwareTrait;
    use MouchardListenerIgnoreListTrait;

    private $display = true;

@@ -76,8 +77,10 @@ class MouchardListenerErrorHandler implements MouchardListenerInterface

        $message = $this->makeMessage($errno, $errstr, $errfile, $errline);
        if ($sm = $this->getMouchard()) {
            if (!$this->ignored($message)){
                $sm->envoyer($message);
            }
        }

        return $this->getDisplay() ? false : null;
    }
+4 −0
Changes for src/UnicaenApp/Mouchard/MouchardListenerException.php: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ class MouchardListenerException implements MouchardListenerInterface
{
    use MouchardAwareTrait;
    use EventManagerAwareTrait;
    use MouchardListenerIgnoreListTrait;




@@ -63,11 +65,13 @@ class MouchardListenerException implements MouchardListenerInterface
            if ($exception) {
                if (!$e->getParam('redirected') === true) {
                    $message = $this->makeMessage($exception);
                    if (!$this->ignored($message)) {
                        $sm->envoyer($message);
                    }
                }
            }
        }
    }



+71 −0
Changes for src/UnicaenApp/Mouchard/MouchardListenerIgnoreListTrait.php: 71 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace UnicaenApp\Mouchard;

trait MouchardListenerIgnoreListTrait
{

    /**
     * @var array
     */
    protected $ignoreList = [];



    public function ignored(MouchardMessage $message)
    {
        foreach ($this->ignoreList as $filter) {
            if ($this->ignoredMatch($message, $filter)) {
                return true;
            }
        }

        return false;
    }



    private function ignoredMatch(MouchardMessage $message, array $filter)
    {
        if (isset($filter['file']) && $message->getFile()) {
            $ffile = strpos($message->getFile(), $filter['file']) !== false;
            if (!$ffile) return false;
        }

        if (isset($filter['line']) && $message->getLine()) {
            $fline = ((int)$filter['line'] == (int)$message->getLine());
            if (!$fline) return false;
        }

        if (isset($filter['content']) && $message->getContent()) {
            $fcont = strpos($message->getContent(), $filter['content']);
            if (!$fcont) return false;
        }

        return true;
    }



    /**
     * @return array
     */
    public function getIgnoreList()
    {
        return $this->ignoreList;
    }



    /**
     * @param array $ignoreList
     *
     * @return self
     */
    public function setIgnoreList($ignoreList)
    {
        $this->ignoreList = $ignoreList;

        return $this;
    }
}
 No newline at end of file
+22 −9
Changes for src/UnicaenApp/Mouchard/MouchardListenerMessenger.php: 22 added lines, 9 removed lines.
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ class MouchardListenerMessenger implements MouchardListenerInterface
{
    use MouchardAwareTrait;
    use EventManagerAwareTrait;
    use MouchardListenerIgnoreListTrait;

    /**
     * @var string[]
@@ -67,10 +68,13 @@ class MouchardListenerMessenger implements MouchardListenerInterface

            if (in_array($severity, $this->getSeverities())) {
                $message = $this->makeMessage($msg, $severity);

                if (!$this->ignored($message)) {
                    $sm->envoyer($message);
                }
            }
        }
    }



@@ -83,18 +87,33 @@ class MouchardListenerMessenger implements MouchardListenerInterface
    private function makeMessage($msg, $severity)
    {
        if (is_array($msg)) {
            $msg = var_export($msg,true);
            $msg = implode("<br />\n", $msg);
        }

        $message = new MouchardMessage();
        $message->setContent($msg);
        $message->setSubject('Messenger : ' . $severity);

        $trace = debug_backtrace();
        $log = false;

        foreach( $trace as $t ){
        $debugTrace = debug_backtrace();
        $traceArray = [];
        foreach ($debugTrace as $t) {
            if ($log) {
                $traceArray[] = $t;
            }
            if (isset($t['class']) && $t['class'] === 'UnicaenApp\View\Helper\Messenger'
                && isset($t['function']) && $t['function'] == 'render'
            ) {
                $log = true;
            }
        }

        $message->setFile($traceArray[0]['file']);
        $message->setLine($traceArray[0]['line']);

        for ($i = 1; $i < count($traceArray); $i++) {
            $t     = $traceArray[$i];
            $trace = new MouchardTrace();
            if (isset($t['file'])) {
                $trace->setFile($t['file']);
@@ -110,12 +129,6 @@ class MouchardListenerMessenger implements MouchardListenerInterface
            }
            $message->addTrace($trace);
        }
            if (isset($t['class']) && $t['class'] === 'UnicaenApp\View\Helper\Messenger'
                && isset($t['function']) && $t['function'] == 'render'
            ){
                $log = true;
            }
        }

        return $message;
    }