first init
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
lastPing.txt
|
||||||
8
changelog.md
Normal file
8
changelog.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
All notable changes to `LaravelVersionTracker` will be documented in this file.
|
||||||
|
|
||||||
|
## Version 1.0
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Everything
|
||||||
33
composer.json
Normal file
33
composer.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"name": "herrleinit/laravelversiontracker",
|
||||||
|
"description": "This package allows sending the Laravel version via API to a server and storing it there.",
|
||||||
|
"license": "MIT",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Martin Herrlein",
|
||||||
|
"email": "info@herrlein.it",
|
||||||
|
"homepage": "https://www.herrlein.it"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"keywords": ["Laravel", "LaravelVersionTracker"],
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.2",
|
||||||
|
"guzzlehttp/guzzle": "*",
|
||||||
|
"laravel/framework": ">=7.*"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Herrleinit\\LaravelVersionTracker\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"laravel": {
|
||||||
|
"providers": [
|
||||||
|
"Herrleinit\\LaravelVersionTracker\\ServiceProvider"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
3
contributing.md
Normal file
3
contributing.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
this Repo is private. If you want to contribute, mail to info@herrlein.it
|
||||||
21
license.md
Normal file
21
license.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2013 Martin Herrlein
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
22
phpunit.xml
Normal file
22
phpunit.xml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<phpunit bootstrap="vendor/autoload.php"
|
||||||
|
backupGlobals="false"
|
||||||
|
backupStaticAttributes="false"
|
||||||
|
colors="true"
|
||||||
|
verbose="true"
|
||||||
|
convertErrorsToExceptions="true"
|
||||||
|
convertNoticesToExceptions="true"
|
||||||
|
convertWarningsToExceptions="true"
|
||||||
|
processIsolation="false"
|
||||||
|
stopOnFailure="false">
|
||||||
|
<testsuites>
|
||||||
|
<testsuite name="Package">
|
||||||
|
<directory suffix=".php">./tests/</directory>
|
||||||
|
</testsuite>
|
||||||
|
</testsuites>
|
||||||
|
<filter>
|
||||||
|
<whitelist>
|
||||||
|
<directory>src/</directory>
|
||||||
|
</whitelist>
|
||||||
|
</filter>
|
||||||
|
</phpunit>
|
||||||
48
readme.md
Normal file
48
readme.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# LaravelVersionTracker
|
||||||
|
|
||||||
|
track the version of your laravel application to a specific server
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Via Composer
|
||||||
|
|
||||||
|
setup vcs repository before
|
||||||
|
``` bash
|
||||||
|
$ composer require herrleinit/laravelversiontracker
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
Setup .env for
|
||||||
|
``` bash
|
||||||
|
TRACKER_SERVER_URL=https://yourserver.com
|
||||||
|
TRACKER_TOKEN=yourtoken for bearer auth
|
||||||
|
```
|
||||||
|
Once the package is installed, you need nothing more to do. The package will automatically track the version of your application to the server.
|
||||||
|
|
||||||
|
```php
|
||||||
|
|
||||||
|
## Change log
|
||||||
|
|
||||||
|
Please see the [changelog](changelog.md) for more information on what has changed recently.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ composer test
|
||||||
|
```
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Please see [contributing.md](contributing.md) for details and a todolist.
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
If you discover any security related issues, please email info@herrlein.it instead of using the issue tracker.
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
- Martin Herrlein https://www.herrlein.it
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT. Please see the [license file](license.md) for more information.
|
||||||
32
src/Console/SendPing.php
Normal file
32
src/Console/SendPing.php
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created with PhpStorm.
|
||||||
|
* Author: Martin Herrlein
|
||||||
|
* info@herrlein.it
|
||||||
|
* https://www.herrlein.it
|
||||||
|
* Date: 17.07.2023
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Herrleinit\LaravelVersionTracker\Console;
|
||||||
|
|
||||||
|
use Herrleinit\LaravelVersionTracker\LaravelVersionTracker;
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
|
||||||
|
|
||||||
|
class SendPing extends Command
|
||||||
|
{
|
||||||
|
protected $signature = 'tracker:ping';
|
||||||
|
|
||||||
|
protected $description = 'Send the current Laravel Info to an external API.';
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle(): int
|
||||||
|
{
|
||||||
|
(new LaravelVersionTracker())->run();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
90
src/LaravelVersionTracker.php
Normal file
90
src/LaravelVersionTracker.php
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Herrleinit\LaravelVersionTracker;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
|
||||||
|
class LaravelVersionTracker
|
||||||
|
{
|
||||||
|
public function run(): bool
|
||||||
|
{
|
||||||
|
if(!env('TRACKER_SERVER')) return false;
|
||||||
|
if(!env('TRACKER_TOKEN')) return false;
|
||||||
|
if(!$this->checkInterval()) return false;
|
||||||
|
$arrData = $this->gatherData();
|
||||||
|
$response = $this->sendData($arrData);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function checkInterval(): bool
|
||||||
|
{
|
||||||
|
$path = __DIR__.'/../lastPing.txt';
|
||||||
|
$lastPing = false;
|
||||||
|
if(file_exists($path))$lastPing = file_get_contents($path);
|
||||||
|
if(empty($lastPing))
|
||||||
|
{
|
||||||
|
file_put_contents($path,now()->toDateTimeString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
$now = now();
|
||||||
|
|
||||||
|
switch(env('TRACKER_INTERVAL'))
|
||||||
|
{
|
||||||
|
case 'daily':
|
||||||
|
$nextPing = Carbon::createFromTimeString($lastPing)->addDay();
|
||||||
|
break;
|
||||||
|
case 'weekly':
|
||||||
|
$nextPing = Carbon::createFromTimeString($lastPing)->addWeek();
|
||||||
|
break;
|
||||||
|
case 'monthly':
|
||||||
|
$nextPing = Carbon::createFromTimeString($lastPing)->addMonth();
|
||||||
|
break;
|
||||||
|
case 'yearly':
|
||||||
|
$nextPing = Carbon::createFromTimeString($lastPing)->addYear();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$nextPing = Carbon::createFromTimeString($lastPing)->addMonth();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$diff = $now->diffInMinutes($nextPing,false);
|
||||||
|
if($diff > 0) return false;
|
||||||
|
unlink($path);
|
||||||
|
file_put_contents($path,$now->toDateTimeString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function gatherData(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'version' => app()->version(),
|
||||||
|
'phpversion' => phpversion(),
|
||||||
|
'appname' => config('app.name'),
|
||||||
|
'url' => config('app.url'),
|
||||||
|
'packages' => $this->getInstalledPackages(),
|
||||||
|
'audits' => $this->getComposerAudits(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function sendData($arrData): \Illuminate\Http\Client\Response
|
||||||
|
{
|
||||||
|
return Http::retry(3,250)
|
||||||
|
->withToken(env('TRACKER_TOKEN'))
|
||||||
|
->post(env('TRACKER_SERVER'), $arrData);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getInstalledPackages(): string
|
||||||
|
{
|
||||||
|
$base = base_path().'/';
|
||||||
|
return shell_exec("cd $base && composer show -f json");
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getComposerAudits(): string | null
|
||||||
|
{
|
||||||
|
$base = base_path().'/';
|
||||||
|
$composerAudit = shell_exec("cd $base && composer audit -f json");
|
||||||
|
$arrAudit = json_decode($composerAudit);
|
||||||
|
return !empty($arrAudit->advisories) ? json_encode($arrAudit->advisories) : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
29
src/ServiceProvider.php
Normal file
29
src/ServiceProvider.php
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Herrleinit\LaravelVersionTracker;
|
||||||
|
|
||||||
|
use Herrleinit\LaravelVersionTracker\Console\SendPing;
|
||||||
|
use Illuminate\Foundation\Console\AboutCommand;
|
||||||
|
|
||||||
|
class ServiceProvider extends \Illuminate\Support\ServiceProvider
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Perform post-registration booting of services.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function boot(): void
|
||||||
|
{
|
||||||
|
(new LaravelVersionTracker())->run();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register any package services.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function register(): void
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user