Laravel — Telescope Kurulum ve Kullanımı

Tolga Karabulut
4 min readJan 23, 2021

--

Herkese Merhaba 👋
Bugün geliştirme yaparken işleri çok kolaylaştıran bir paketten bahsedeceğiz. Paketimizin ismi Telescope. Kısaca uygulamamız üzerinde gerçekleşen İstekler, Hatalar, Kayıtlar, Veritabanı sorguları, Kuyrukta ki işlerin durumu, Mail, Bildirim, Önbellek ve Zamanlanmış olan işler için bize tüm detayları nereden başlayıp nerede ne şekilde sonlandığı konusunda bilgi veren bir paket. Geliştirme yaparken oldukça işinize yarayacaktır!

Hadi Başlayalım…

Kurulum

Composer üzerinden basit bir kurulum yolumuz var. Tüm Dökümantasyona https://laravel.com/docs/8.x/telescope üzerinden erişebilirsiniz.

composer require laravel/telescope

ve sonrasında kuruluma

php artisan telescope:install

php artisan migrate

adımları ile devam ediyoruz burada veritabanızda

2018_08_08_100000_create_telescope_entries_table

migration dosyası üzerinden telescope a ait veritabanı tabloları oluşacaktır.

Ayarlar

Laravel üzerinde kurulumunu tamamladıktan sonra ‘config/telescope.php’ dosyası oluşacaktır. Burada izleyicilerden hangilerini açacağımızı veya telescope u tamamen kapatabileceğimiz seçenekler detaylıca açıklanmıştır.

'enabled' => env('TELESCOPE_ENABLED', true),

false yapılarak tamamen kapatmak mümkündür.

Verileri temizlemek

Veritabanımızda ki kayıtların artması ve uzun sürede yer işgal etmesi ile alakalı olarak belirlediğimiz aralıklarla silinmelerini sağlayabiliriz. Bunun için laravel’in bir özelliği olan Zamanlanmış görevlerden yararlanacağız. Şu şekilde yapacağız.

#/app/Console/Kernel.php/**
* Define the application's command schedule.
*
*
@param \Illuminate\Console\Scheduling\Schedule $schedule
*
@return void
*/
protected function
schedule(Schedule $schedule)
{
$schedule->command('telescope:prune')->daily();
}

Burada uygulamamıza günlük olarak verileri temizlemesi gerektiğini söyledik. “telescope:prune” komutu varsayılan olarak son 24 saatten önceki verileri silmek üzerine ayarlanmıştır. Bunu değiştirmek istersek ek bir parametre eklememiz gerekiyor. Bunu şu şekilde yapabiliriz.

$schedule->command('telescope:prune --hours=48')->daily();

Burada son 48 saatlik kaydın korunması ve gerisinin silinmesi gerektiğini söylemiş olduk. Detaylı bilgiyi https://laravel.com/docs/8.x/scheduling üzerinden edinebilirsiniz.

Gece Modu

# app/Providers/TelescopeServiceProvideruse Laravel\Telescope\IncomingEntry;
use Laravel\Telescope\Telescope;

/**
* Register any application services.
*
*
@return void
*/
public function
register()
{
/** Yorum satırı silinerek Telescope gece modu
* tasarımına geçirilebilir.
**/

Telescope::night();

....

Yetkilendirme

Birazdan bahsedeceğimiz kontrol paneli üzerinde ki verilere kimlerin ulaşabileceğini ayarlamak istersek

#/app/Providers/TelescopeServiceProvider/**
* Register the Telescope gate.
*
* This gate determines who can access Telescope in non-local environments.
*
*
@return void
*/
protected function
gate()
{
Gate::define('viewTelescope', function ($user) {
return in_array($user->email, [
"tolga.karabulut@medianova.com"
]);
});
}

şeklinde yapabiliriz. Burada belirtiniz mail adresleri giriş yapmış kullanıcılar hariç kontrol paneline erişemeyeceklerdir. Burada JWT ile API sunucularında nasıl erişeceğimiz konusunu daha sonra anlatacağım.

İstekleri Filtreleme

Burada local ve production sunucularımız arasında izlenecek içerikleri düzenleyebiliriz. Varsayılan olarak şöyle görünüyor.

# app/Providers/TelescopeServiceProvideruse Laravel\Telescope\IncomingEntry;
use Laravel\Telescope\Telescope;

/**
* Register any application services.
*
*
@return void
*/
public function
register()
{
// Telescope::night();

$this->hideSensitiveRequestDetails();

Telescope::filter(function (IncomingEntry $entry) {
/**
* Eğer uygulama local durumdaysa bir filtreleme uygulanmaz
*/
if
($this->app->environment('local')) {
return true;
}

/**
* Değilse
* Hatalı olan İstekler
* Planlanan Eylemler, Tamamlanmayan İşler
* vb. durumlar telescope üzerinde görüntülenmezler.
*/
return
$entry->isReportableException() ||
$entry->isFailedRequest() ||
$entry->isFailedJob() ||
$entry->isScheduledTask() ||
$entry->hasMonitoredTag();
});
}

Etiketleme

Telescope üzerinde gelen istekleri bir etiket sistemi ile etiketleyerek daha sonra aramalarda daha rahat bulabiliriz. Bunun için şöyle bir yol izliyoruz.

# app/Providers/TelescopeServiceProvideruse Laravel\Telescope\IncomingEntry;
use Laravel\Telescope\Telescope;

/**
* Register any application services.
*
*
@return void
*/
public function
register()
{
...
/**
* Eğer isteğin tipi "Request" ise isteğin durum koduna göre gruplamış
* oluyoruz.
*/
Telescope::tag(function (IncomingEntry $entry) {
return $entry->type === 'request'
? ['status:'.$entry->content['response_status']]
: [];
});
...
Laravel Telescope — Tags
Tüm istekler.

Burada şu an tüm istekleri görüyoruz. Biz ise istekleri etiketlemiştik. Arama kısmana “status:404” yazarak “404 — Not Found” olanları filtreleyebiliriz.

Laravel Telescope — Tag Filters
Status:404 olanların filtrelendiği ekran.

İzleyiciler

İzlenen içeriklerin istenmeyen durumların filtreleme kısmında nasıl yönetilebileceğini öğrenmiş. Eğer tamamen takip edilmesini kapatmak veya açmak istiyorsak devreye izleyeciler giriyor. Şu şekilde ayarlayabiliriz.

# config/telescope.php/** 
* Önbellek takibi => açık
* Komut Takibi => kapalı
* View Takibi => açık
* Bu şekilde istediğiniz izlemeleri kapatabilirsiniz.
**/
'watchers' => [
Watchers\CacheWatcher::class => true,
Watchers\CommandWatcher::class => false,
Watchers\ViewWatcher::class => true,
...
],

Bazı izleyicilere ek ayar yapabilirsiniz. Örneğin;

'watchers' => [
....
Watchers\QueryWatcher::class => [
'enabled' => true,
'slow' => 100,
],
... Watchers\CommandWatcher::class => [
'enabled' => env('TELESCOPE_COMMAND_WATCHER', true),
'ignore' => ['key:generate'],
],
...
Watchers\ModelWatcher::class => [
'enabled' => env('TELESCOPE_MODEL_WATCHER', true),
'events' => ['eloquent.created*', 'eloquent.updated*'],
],
...
],/**
* Query Watcher
* Burada eğer bir SQL sorgusu 100ms den uzun sürerse size log olarak
* gösterilir.
*
*
* CommandWatcher
* Terminal üzerinden çalıştırdığımız komutlar takip edilirken
* ["key:generate"] komutunun takip edilmemesi gerektiğini söylüyoruz
*
*
* ModelWatcher
*
* Model üzerinde sadece "Create" -- "Updated" işlemlerinin takip
* edilmesini söylemiş oluyoruz.
**/

Diğer tüm detayları dosyayı inceleyerek ve döküman üzerinden inceleyebilirsiniz. Örnek projeye github üzerinden erişebilirsiniz.

Bir konunun daha sonuna geldik. Tüm sorularınızı konunun altına yazarak veya sosyal medya hesaplarım üzerinden iletebilirsiniz.

Herkese İyi Kodlamalar!

Tolga Karabulut
tolga.karabulut@medianova.com
Medianova CDN | Senior PHP Developer

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Tolga Karabulut
Tolga Karabulut

Written by Tolga Karabulut

Software Development Specialist | @teknasyon Developer Team

Responses (1)

Write a response