Skip to content

[READ-ONLY] An elegant debug assistant for the hyperf framework.

License

Notifications You must be signed in to change notification settings

friendsofhyperf/telescope

Repository files navigation

Telescope

An elegant debug assistant for the hyperf framework.

Functions

  • request
  • exception
  • sql
  • grpc server/client
  • redis
  • log
  • command
  • event
  • guzzle
  • cache
  • rpc server/client

Installation

composer require friendsofhyperf/telescope:~3.1.0

Publish

php bin/hyperf.php vendor:publish friendsofhyperf/telescope

Migrate

php bin/hyperf.php migrate

Add Listener

<?php

// config/autoload/listeners.php

return [
    FriendsOfHyperf\Telescope\Listener\RequestHandledListener::class,
];

Add Middleware

<?php

// config/autoload/middlewares.php

return [
    'grpc' => [
        FriendsOfHyperf\Telescope\Middleware\TelescopeMiddleware::class,
    ],
];

TelescopeMiddleware or RequestHandledListener, you can choose one of them.

Add env

# telescope
TELESCOPE_DB_CONNECTION=default

TELESCOPE_ENABLE_REQUEST=true
TELESCOPE_ENABLE_COMMAND=true
TELESCOPE_ENABLE_GRPC=true
TELESCOPE_ENABLE_LOG=true
TELESCOPE_ENABLE_REDIS=true
TELESCOPE_ENABLE_EVENT=true
TELESCOPE_ENABLE_EXCEPTION=true
TELESCOPE_ENABLE_JOB=true
TELESCOPE_ENABLE_DB=true
TELESCOPE_ENABLE_GUZZLE=true
TELESCOPE_ENABLE_CACHE=true
TELESCOPE_ENABLE_RPC=true

TELESCOPE_SERVER_ENABLE=true

Visit

http://127.0.0.1:9509/telescope/requests

Tagging

you may want to attach your own custom tags to entries. To accomplish this, you may use the Telescope::tag method.

Filtering

You may only want to record entries under certain special conditions. To achieve this, you may use the Telescope::filter method.

Example

use FriendsOfHyperf\Telescope\Telescope;
use Hyperf\Event\Contract\ListenerInterface;
use Hyperf\Framework\Event\BootApplication;
use FriendsOfHyperf\Telescope\IncomingEntry;

class TelescopeInitListener implements ListenerInterface
{
    public function listen(): array
    {
        return [
            BootApplication::class,
        ];
    }

    public function process(object $event): void
    {
        // attach your own custom tags
        Telescope::tag(function (IncomingEntry $entry) {
            if ($entry->type === 'request') {
                return [
                    'status:' . $entry->content['response_status'],
                    'uri:'. $entry->content['uri'],
                ];
            }
        });

        // filter entry
        Telescope::filter(function (IncomingEntry $entry): bool {
            if ($entry->type === 'request'){
                if ($entry->content['uri'] == 'xxxx') {
                    return false;
                }
            }
            return true;
        });

    }
}

You can also do this in middleware.