--> -->

skimemo


skimemo - 日記/2015-08-29/Kmdのlogviewerに「全てのログを削除する」機能を追加してみた の変更点


#blog2navi()
*Kmdのlogviewerに「全てのログを削除する」機能を追加してみた [#bfdb4f76]

#ref(screen.png)~
~
Laravelのlog viewerとして愛用している[[kmd/logviewer:https://packagist.org/packages/kmd/logviewer]]。~
インストール方法は上記リンク先を見て頂ければ簡単です。入れるだけです。~
~
画面デザインも[[画像検索:http://www.google.co.jp/search?q=kmd+logviewer+laravel&btnG=%E6%A4%9C%E7%B4%A2&lr=&hl=ja&tbm=isch]]して頂ければ解るとおり、綺麗です。~
そして何と言っても速い!~
大量のログが溜まっても、ストレス無く開けます。~
~
このviewer、ログの削除機能が付いているのは良いのですが、現在見ているログしか消せないので、ログが溜まってくると1つ1つ開いて消さなくてはならず、面倒です。~
まあ、古いログなんてlogrotateが勝手に消してくれるから関係ない、って方は良いのですが、気になっちゃう人は気になっちゃいますよね。~
~
そんなわけで、「全てのログを削除する」機能、付けてみました。~
でも日本語でkmd/logviewer検索しても何も出ないんだよなぁ。誰も使ってないのかな。~
~
変更するファイルはたったの5つです(主要なファイルは殆どとも言う)。
** /src/filters.php [#b1096cbd]
filterの中でログファイルリストを作成しているので、削除処理からも使えるようにLogviewer.phpに追い出します。
#code(php,first-line:3){{{
#code(php,3-){{{
use Kmd\Logviewer\Logviewer;

Route::filter('logviewer.logs', function () {
    if (!Lang::has('logviewer::logviewer.sapi')) {
        App::setLocale('en');
    }

	$app = key(Config::get('logviewer::log_dirs'));
    View::share('logs', (new Logviewer($app, null, null))->makeLogs(Lang::get('logviewer::logviewer.sapi')));
});
}}}

** src/Kmd/Logviewer/Logviewer.php [#pc65d0b3]
追い出されたひと。
#code(php){{{
/**
 * Make the all log file list.
 *
 * @access public
 * @param $sapis
 * @return array
 */
public function makeLogs($sapis) {
	$logs = array();
	foreach($sapis as $sapi => $human) {
		$logs[$sapi]['sapi'] = $human;
		$dirs = Config::get('logviewer::log_dirs');

		$files = $orgs = array();

		foreach($dirs as $app => $dir) {
			$files[$app] = glob($dir.'/log-'.$sapi.'*', GLOB_BRACE);
			$orgs[$app] = $files[$app];
			if(is_array($files[$app])) {
				$files[$app] = array_reverse($files[$app]);
				foreach($files[$app] as &$file) {
					$file = preg_replace('/.*(\d{4}-\d{2}-\d{2}).*/', '$1', basename($file));
				}
			} else {
				$files[$app] = array();
			}
		}

		$logs[$sapi]['logs'] = $files;
		$logs[$sapi]['orgs'] = $orgs;
	}
	return $logs;
}
}}}
それと、全削除の関数も追加。
#code(php){{{
/**
 * Delete the all logs.
 *
 * @param $sapis
 * @return bool
 */
public function delete_all($sapis) {
	$result = true;
	foreach($this->makeLogs($sapis) as $type => $files) {
		if(!empty($files['orgs'])) {
			foreach($files['orgs'] as $app => $file) {
				if ( !empty($file) ){
					foreach ($file as $f){
						if( !File::delete($f) ){
							$result = false;
					    }
					}
				}
			}
		}
	}
	return $result;
}
}}}

** src/lang/en/logviewer.php , src/lang/jp/logviewer.php [#u21bce70]
文言も追加します。英語と日本語。
日本語って「ja」になってるんですが、「jp」ですよね? ディレクトリrenameしました。
#code(php,first-line:5){{{
#code(php,5-){{{
 'delete' => array(
    'one' => array(
        'modal' => array(
            'header' => 'Are you sure?',
            'body' => 'Are you sure you want to delete this log?',
            'btn' => array(
                'no' => 'No',
                'yes' => 'Yes',
            )
        ),
        'error' => 'There was an error while deleting the log.',
        'success' => 'Log deleted successfully!',
        'btn' => 'Delete Current Log',
    ),
    'all' => array(
	    'modal' => array(
		    'header' => 'Are you sure?',
		    'body' => 'Are you sure you want to delete ALL logs?',
		    'btn' => array(
			    'no' => 'No',
			    'yes' => 'Yes',
		    )
	    ),
	    'error' => 'There was an error while deleting the all logs.',
	    'success' => 'Logs deleted successfully!',
	    'btn' => 'Delete ALL Logs',
    ),
 ),
}}}
#code(php,first-line:5){{{
#code(php,5-){{{
'delete' => array(
    'one'=>array(
        'modal' => array(
            'header' => 'よろしいですか?',
            'body' => 'このログを削除してもよろしいですか?',
            'btn' => array(
                'no' => 'いいえ',
                'yes' => 'はい',
            )
        ),
        'error' => '削除中にエラーが発生しました。',
        'success' => 'ログの削除は成功しました!',
        'btn' => '現行のログを削除する',
    ),
    'all'=>array(
	    'modal' => array(
		    'header' => 'よろしいですか?',
		    'body' => '全てのログを削除してもよろしいですか?',
		    'btn' => array(
			    'no' => 'いいえ',
			    'yes' => 'はい',
		    )
	    ),
	    'error' => '削除中にエラーが発生しました。',
	    'success' => 'ログの削除は成功しました!',
	    'btn' => '全てのログを削除する',
    ),
),
}}}

** src/routes.php [#a2becbc0]
削除処理そのものはroutes.phpで行われています。~
ここに全削除の処理を追加すると共に、文言指定を修正。
#code(php,first-line:66){{{
#code(php,66-){{{
    Route::group(array('before' => $filters['before'], 'after' => $filters['after']), function () {
        Route::get(Config::get('logviewer::base_url').'/{path}/{sapi}/{date}/delete', function ($path, $sapi, $date) {
            $logviewer = new Logviewer($path, $sapi, $date);

            if ($logviewer->delete()) {
                $today = Carbon::today()->format('Y-m-d');
                return Redirect::to(Config::get('logviewer::base_url').'/'.$path.'/'.$sapi.'/'.$today.'/all')
                    ->with('success', Lang::get('logviewer::logviewer.delete.one.success'));
            } else {
                return Redirect::to(Config::get('logviewer::base_url').'/'.$path.'/'.$sapi.'/'.$date.'/all')
                    ->with('error', Lang::get('logviewer::logviewer.delete.one.error'));
            }
        });
	    Route::get(Config::get('logviewer::base_url').'/{path}/{sapi}/{date}/delete_all', function ($path, $sapi, $date) {
		    $logviewer = new Logviewer($path, $sapi, $date);

		    if ($logviewer->delete_all(Lang::get('logviewer::logviewer.sapi'))) {
			    $today = Carbon::today()->format('Y-m-d');
			    return Redirect::to(Config::get('logviewer::base_url').'/'.$path.'/'.$sapi.'/'.$today.'/all')
				    ->with('success', Lang::get('logviewer::logviewer.delete.all.success'));
		    } else {
			    return Redirect::to(Config::get('logviewer::base_url').'/'.$path.'/'.$sapi.'/'.$date.'/all')
				    ->with('error', Lang::get('logviewer::logviewer.delete.all.error'));
		    }
	    });
    });
}}}

** src/views/viewer.blade.php [#l604b18f]
最後に、全て削除ボタンを追加します。~
ここでも文言の指定を修正します。
#code(php,first-line:44){{{
#code(php,44-){{{
                                @if ( !$empty )
                                    <div class="pull-right">
                                        {{ HTML::link('#delete_modal', Lang::get('logviewer::logviewer.delete.one.btn'), array('class' => 'btn btn-danger', 'data-toggle' => 'modal', 'data-target' => '#delete_modal')) }}
                                    </div>
                                    <div class="pull-right">
                                        &nbsp;&nbsp;&nbsp;
                                    </div>
                                    <div class="pull-right">
                                        {{ HTML::link('#delete_modal_all', Lang::get('logviewer::logviewer.delete.all.btn'), array('class' => 'btn btn-danger', 'data-toggle' => 'modal', 'data-target' => '#delete_modal_all')) }}
                                    </div>
                                @endif
}}}
#code(php,first-line:149){{{
#code(php,149-){{{
        <div id="delete_modal" class="modal hide fade">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">×</button>
                <h3>{{ Lang::get('logviewer::logviewer.delete.one.modal.header') }}</h3>
            </div>
            <div class="modal-body">
                <p>{{ Lang::get('logviewer::logviewer.delete.one.modal.body') }}</p>
            </div>
            <div class="modal-footer">
                {{ HTML::link($url.'/'.$path.'/'.$sapi_plain.'/'.$date.'/delete', Lang::get('logviewer::logviewer.delete.one.modal.btn.yes'), array('class' => 'btn btn-success')) }}
                <button class="btn btn-danger" data-dismiss="modal">{{ Lang::get('logviewer::logviewer.delete.one.modal.btn.no') }}</button>
            </div>
        </div>
        <div id="delete_modal_all" class="modal hide fade">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">×</button>
                <h3>{{ Lang::get('logviewer::logviewer.delete.all.modal.header') }}</h3>
            </div>
            <div class="modal-body">
                <p>{{ Lang::get('logviewer::logviewer.delete.all.modal.body') }}</p>
            </div>
            <div class="modal-footer">
                {{ HTML::link($url.'/'.$path.'/'.$sapi_plain.'/'.$date.'/delete_all', Lang::get('logviewer::logviewer.delete.all.modal.btn.yes'), array('class' => 'btn btn-success')) }}
                <button class="btn btn-danger" data-dismiss="modal">{{ Lang::get('logviewer::logviewer.delete.all.modal.btn.no') }}</button>
            </div>
        </div>
}}}
これで快適にlogviewライフを楽しめます;-)~

#htmlinsert(twitterbutton.html)
RIGHT:Category: &#x5b;[[Linux>日記/Category/Linux]]&#x5d; - 16:13:36
----
RIGHT:&blog2trackback();
#comment(above)
#blog2navi()