GithubHelp home page GithubHelp logo

sarfraznawaz2005 / cockpit Goto Github PK

View Code? Open in Web Editor NEW

This project forked from mpociot/cockpit

0.0 2.0 0.0 227 KB

Custom widgets for your Laravel app

PHP 60.25% CSS 1.39% JavaScript 22.21% HTML 16.16%

cockpit's Introduction

Cockpit

Custom widgets for your Laravel app

image image image codecov.io Scrutinizer Code Quality Build Status

Easy to use widgets with custom metrics, filters and drag and drop support.

Note: Documentation is still in progress.

Contents

## Installation

In order to install Cockpit, just add

"mpociot/cockpit": "~1.0"

to your composer.json. Then run composer install or composer update.

(or run composer require mpociot/cockpit if you prefere that)

Then in your config/app.php add

Mpociot\Cockpit\CockpitServiceProvider::class

in the providers array.

Next, publish Cockpit's views, javascript files and migration and run the migrate command.

php artisan vendor:publish --provider="Mpociot\Cockpit\CockpitServiceProvider"
php artisan migrate
## Usage

After you've published all the needed assets and created the widgets table through the Cockpit migration, you're good to go.

Cockpit comes with some preconfigured routes, so go ahead and visit: http://your.app/cockpit/.

This is your "dashboard" which allows you to create custom widgets that will query your application and show some nice charts.

### How does it work?

When you add a new widget, Cockpit will look in a configurable folder for all available metrics your app could define. Each metric can have multiple sub-metrics that can be queried and those sub-metrics are filterable.

Example to make the concept easier to understand:

Your app logs all logins. On your dashboard, you want to be able to show a widget that displays:

  • All logins grouped by "time" (this could be day, week, month, year)
  • All logins grouped by specific users

In this case, your metric would be Logins that has two submetrics named per_time and per_user.

### Custom metrics

Cockpit ships a simple Users metric, which will be copied to this directory: app/Cockpit/Metrics. If your app is running in a different namespace or you want to change the path of your custom metrics, modify the appropriate values in the config/cockpit.php file.

The base structure of a metric is:

use Mpociot\Cockpit\Metric;

class Logins extends Metric
{
	// Visible name when selecting the metric in the UI
	protected $name = "My Metric";
	
	// Define all submetrics and which charts are available for each submetric
	protected $allowedSubMetrics = [
        'per_user' => ['LineChart','ColumnChart','PieChart'],
    ];

    // Define all filters that can be applied to this metric
    protected $allowedFilters = [
        'username' => [
            'type' => 'text',
            'name' => 'Username'
        ]
    ];
	
	/**
	 * Implement date filter functionality.
	 * This is needed for all metrics, as the time filter is always available
	 */
    protected function filterFromDate($query, $value)
    {
        return $query->where("created_at" , ">", $value);
    }

    protected function filterUntilDate($query, $value)
    {
        return $query->where("created_at" , "<=", $value);
    }
    
    /**
     * Implement your custom submetrics
     */
     public function calculatePerUser($filters = [])
    {
		// Use this Eloquent model for all queries
        $query = \App\Models\Login::query();
        
		// Apply each filter method on the query object
        $query = $this->applyFilters($query, $filters);

		// Get the results we need to display
        $results = $query
	        ->groupBy("username")
	        ->get([
                DB::raw('username, COUNT(*) AS `count`')
            ]);
		
		// Define the columns our chart will have
        $this->dataTable
        		->addStringColumn("Username")
            	->addNumberColumn("Num Logins");

		// Add the database results to our chart
        foreach ($results as $result) {
            $this->dataTable->addRow([
           	   $result->username,
                $result->count
            ]);
        }

        return $this->dataTable;
    }
     
     /**
     * Implement your custom filters
     */
	protected function filterUsername($query, $value)
    {
        return $query->where("username",$value);
    }
     
}
### Custom filters

Not documented yet :(

### Available chart types
  • Line Chart
  • Area Chart
  • Bar Chart
  • Column Chart
  • Pie Chart
  • Donut Chart
  • Geo Chart
  • Calendar Chart
  • Gauge Chart

For further information about how the DataTable API / Chart API works, please take a look at Lavacharts.

## License

cockpit is free software distributed under the terms of the MIT license.

cockpit's People

Contributors

mpociot avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.