Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: TheDMSGroup/mautic-health
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 2.14.04
Choose a base ref
...
head repository: TheDMSGroup/mautic-health
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: master
Choose a head ref

Commits on Jun 29, 2018

  1. Drop unused dependencies.

    heathdutton committed Jun 29, 2018
    Copy the full SHA
    f437645 View commit details

Commits on Jul 6, 2018

  1. General code cleanup sweep.

    heathdutton committed Jul 6, 2018
    Copy the full SHA
    7255fa6 View commit details

Commits on Jul 7, 2018

  1. Merge pull request #1 from TheDMSGroup/cleanup

    General code cleanup sweep.
    heathdutton authored Jul 7, 2018

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    1878c20 View commit details

Commits on Jul 26, 2018

  1. Updated readme

    heathdutton committed Jul 26, 2018
    Copy the full SHA
    867be6f View commit details

Commits on Oct 4, 2018

  1. Support for soft-deleted events.

    See Mautic #6247
    heathdutton committed Oct 4, 2018
    Copy the full SHA
    6f2eb83 View commit details
  2. Exclude unpublished events from counts.

    Requires mautic 2.15.0+
    heathdutton committed Oct 4, 2018
    Copy the full SHA
    fbc7011 View commit details
  3. Merge pull request #2 from TheDMSGroup/soft-delete-events

    Soft delete events
    heathdutton authored Oct 4, 2018

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    b5a8614 View commit details

Commits on Feb 5, 2019

  1. Add test for PHP 7.2

    Heath Dutton ☕ authored Feb 5, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    d19d483 View commit details

Commits on Feb 18, 2019

  1. [ENG-619] Base health checks on time instead of quantity.

    This is way saver, and about 1000x faster.
    Only checks kickoff events and scheduled events, but well worth the
    change.
    heathdutton committed Feb 18, 2019
    Copy the full SHA
    f22e280 View commit details
  2. [ENG-619] Correct nomenclature.

    heathdutton committed Feb 18, 2019
    Copy the full SHA
    f2ef211 View commit details
  3. Copy the full SHA
    bc57e7a View commit details

Commits on Feb 19, 2019

  1. Copy the full SHA
    69b1f7c View commit details
  2. Copy the full SHA
    3c55387 View commit details
  3. Copy the full SHA
    973dfe1 View commit details
  4. [ENG-619] Remove \n.

    heathdutton committed Feb 19, 2019
    Copy the full SHA
    2ae7d83 View commit details
  5. [ENG-619] Add dashboard widget for campaign delays.

    heathdutton committed Feb 19, 2019
    Copy the full SHA
    0388d13 View commit details

Commits on Feb 20, 2019

  1. Copy the full SHA
    bdac5e2 View commit details
  2. Merge pull request #3 from TheDMSGroup/ENG-619-improve-health-checks

    [ENG-619] Base health checks on time instead of quantity.
    scottshipman authored Feb 20, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    c9b3f9c View commit details

Commits on Feb 26, 2019

  1. [ENG-619] Minor style fixes.

    heathdutton committed Feb 26, 2019
    Copy the full SHA
    12ab31b View commit details

Commits on Feb 27, 2019

  1. Merge pull request #4 from TheDMSGroup/ENG-619-improve-health-checks

    [ENG-619] Minor style fixes.
    heathdutton authored Feb 27, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    e8a669b View commit details

Commits on Feb 28, 2019

  1. Avoid preventing other dashboard widgets from loading.

    heathdutton committed Feb 28, 2019
    Copy the full SHA
    4aed8d3 View commit details

Commits on Mar 4, 2019

  1. Correct exception with date.

    heathdutton committed Mar 4, 2019
    Copy the full SHA
    923d572 View commit details

Commits on Mar 13, 2019

  1. Extend health back-check to 48 hours.

    heathdutton committed Mar 13, 2019
    Copy the full SHA
    254d3e6 View commit details

Commits on Mar 14, 2019

  1. Add event ID and campaign ID to output widget.

    heathdutton committed Mar 14, 2019
    Copy the full SHA
    86c8da6 View commit details

Commits on Mar 19, 2019

  1. PHPCS fix.

    heathdutton committed Mar 19, 2019
    Copy the full SHA
    321c6fe View commit details

Commits on Mar 25, 2019

  1. Merge pull request #5 from TheDMSGroup/phpcs-fix

    PHPCS fix.
    scottshipman authored Mar 25, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    a9be743 View commit details

Commits on Apr 30, 2019

  1. Copy the full SHA
    e8a99f0 View commit details

Commits on May 24, 2019

  1. Merge pull request #6 from TheDMSGroup/ENG-827-risk-template

    [ENG-827] Add template for risk assessment on Pull Request.
    Heath Dutton ☕ authored May 24, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    8ff16df View commit details

Commits on Aug 26, 2019

  1. [ENG-1024] Prevent false alarm from empty campaigns.

    heathdutton committed Aug 26, 2019
    Copy the full SHA
    feb3c44 View commit details
  2. [ENG-1024] Minor correction.

    Heath Dutton ☕ authored Aug 26, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    721ad7f View commit details
  3. Merge pull request #7 from TheDMSGroup/ENG-1024-empty-campaign-improv…

    …ement
    
    [ENG-1024] Prevent false alarm from empty campaigns.
    Heath Dutton ☕ authored Aug 26, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    77000a9 View commit details
16 changes: 16 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
**Please be sure you are submitting this against the _master_ branch.**

[//]: # This Pull Request (Place an 'X' for each):

| Risk Level | No | Low | High |
| ----------------------------------------- | -- | --- | ---- |
| Alters Lead Data? | | | |
| Schema Change? | | | |
| Adds A Query or Modifies Existing Query? | | | |
| Adds or Modifies Existing Auto-Enhancer? | | | |
| Modifies Ingestion Process? | | | |
| Modifies sendContact Data? | | | |


[//]: # ( Required: )
#### Description:
5 changes: 3 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -15,6 +15,7 @@ php:
- 5.6.19
- 7.0
- 7.1
- 7.2

before_install:

@@ -56,5 +57,5 @@ script:
# Run PHPSTAN analysis for PHP 7+ only in the scope of this plugin.
- if [[ ${TRAVIS_PHP_VERSION:0:3} != "5.6" ]]; then ~/.composer/vendor/phpstan/phpstan-shim/phpstan.phar analyse plugins/$MAUTIC_PLUGIN; fi

# Check code standards for PHP 7.1 only in the scope of this plugin.
- if [[ ${TRAVIS_PHP_VERSION:0:3} == "7.1" ]]; then bin/php-cs-fixer fix -v --dry-run --diff plugins/$MAUTIC_PLUGIN; fi
# Check code standards for PHP 7.2 only in the scope of this plugin.
- if [[ ${TRAVIS_PHP_VERSION:0:3} == "7.2" ]]; then bin/php-cs-fixer fix -v --dry-run --diff plugins/$MAUTIC_PLUGIN; fi
80 changes: 49 additions & 31 deletions Command/HealthCommand.php
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@

/*
* @copyright 2018 Mautic Contributors. All rights reserved
* @author Mautic, Inc
* @author Digital Media Solutions, LLC
*
* @link http://mautic.org
*
@@ -15,6 +15,7 @@
use MauticPlugin\MauticHealthBundle\Model\HealthModel;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\NullOutput;
use Symfony\Component\Console\Output\OutputInterface;

/**
@@ -32,16 +33,22 @@ protected function configure()
$this->setName('mautic:health:check')
->setDescription('General all purpose health check.')
->addOption(
'campaign-rebuild-threshold',
'campaign-kickoff-delay',
null,
InputOption::VALUE_OPTIONAL,
'The maximum number of contacts waiting to be ingested into a campaign from a segment.'
'The maximum number of seconds average allowed for kickoff events at the top of the campaign.'
)
->addOption(
'campaign-trigger-threshold',
'campaign-scheduled-delay',
null,
InputOption::VALUE_OPTIONAL,
'The maximum number of contacts waiting for scheduled campaign events to fire which are late.'
'The maximum number of seconds average allowed for scheduled events (beyond the intended delays).'
)
->addOption(
'campaign-inactive-delay',
null,
InputOption::VALUE_OPTIONAL,
'The maximum number of seconds average allowed for inactive events (decisions).'
);

parent::configure();
@@ -55,48 +62,59 @@ protected function configure()
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$verbose = $input->getOption('verbose');
$campaignRebuildThreshold = $input->getOption('campaign-rebuild-threshold');
$campaignTriggerThreshold = $input->getOption('campaign-trigger-threshold');
$quiet = $input->getOption('quiet');
$container = $this->getContainer();
$translator = $container->get('translator');
// $campaignRebuildDelay = $input->getOption('campaign-rebuild-delay');
$campaignKickoffDelay = $input->getOption('campaign-kickoff-delay');
$campaignScheduledDelay = $input->getOption('campaign-scheduled-delay');
$campaignInactiveDelay = $input->getOption('campaign-inactive-delay');
$quiet = $input->getOption('quiet');
$container = $this->getContainer();
$translator = $container->get('translator');

// if ($quiet) {
// $output = new NullOutput();
// }
if (!$this->checkRunStatus($input, $output)) {
return 0;
}

/** @var HealthModel $healthModel */
$healthModel = $container->get('mautic.health.model.health');
if ($verbose) {
$output->writeln(
'<info>'.$translator->trans(
'mautic.health.running'
).'</info>'
);
}
$output->writeln('<info>'.$translator->trans('mautic.health.running').'</info>');
$settings = [];
if ($campaignRebuildThreshold) {
$settings['campaign_rebuild_threshold'] = $campaignRebuildThreshold;
// if ($campaignRebuildDelay) {
// $settings['campaign_rebuild_delay'] = $campaignRebuildDelay;
// }
if ($campaignKickoffDelay) {
$settings['campaign_kickoff_delay'] = $campaignKickoffDelay;
}
if ($campaignScheduledDelay) {
$settings['campaign_scheduled_delay'] = $campaignScheduledDelay;
}
if ($campaignTriggerThreshold) {
$settings['campaign_trigger_threshold'] = $campaignTriggerThreshold;
if ($campaignInactiveDelay) {
$settings['campaign_inactive_delay'] = $campaignInactiveDelay;
}
if ($settings) {
$healthModel->setSettings($settings);
}
$healthModel->campaignRebuildCheck($output, $verbose);
$healthModel->campaignTriggerCheck($output, $verbose);

$output->writeln('<info>'.$translator->trans('mautic.health.kickoff').'</info>');
$healthModel->campaignKickoffCheck($output);

$output->writeln('<info>'.$translator->trans('mautic.health.scheduled').'</info>');
$healthModel->campaignScheduledCheck($output);

// @todo - Add negative action path check.
// $healthModel->campaignRebuildCheck($output, $verbose);
$healthModel->setCache();

if (!$quiet) {
$healthModel->reportIncidents($output);
}
if ($verbose) {
$output->writeln(
'<info>'.$translator->trans(
'mautic.health.complete'
).'</info>'
);
}
$output->writeln(
'<info>'.$translator->trans(
'mautic.health.complete'
).'</info>'
);
$this->completeRun();

return 0;
14 changes: 12 additions & 2 deletions Config/config.php
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@

/*
* @copyright 2018 Mautic Contributors. All rights reserved
* @author Mautic, Inc
* @author Digital Media Solutions, LLC
*
* @link http://mautic.org
*
@@ -16,12 +16,22 @@
'author' => 'Mautic',

'services' => [
'models' => [
'models' => [
'mautic.health.model.health' => [
'class' => 'MauticPlugin\MauticHealthBundle\Model\HealthModel',
'arguments' => [
'doctrine.orm.entity_manager',
'mautic.helper.integration',
'mautic.campaign.model.campaign',
'mautic.campaign.model.event',
],
],
],
'events' => [
'mautic.health.dashboard.subscriber' => [
'class' => 'MauticPlugin\MauticHealthBundle\EventListener\DashboardSubscriber',
'arguments' => [
'mautic.health.model.health',
],
],
],
80 changes: 80 additions & 0 deletions EventListener/DashboardSubscriber.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
<?php

/*
* @copyright 2018 Mautic Contributors. All rights reserved
* @author Digital Media Solutions, LLC
*
* @link http://mautic.org
*
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/

namespace MauticPlugin\MauticHealthBundle\EventListener;

use Mautic\DashboardBundle\Event\WidgetDetailEvent;
use Mautic\DashboardBundle\EventListener\DashboardSubscriber as MainDashboardSubscriber;
use MauticPlugin\MauticHealthBundle\Model\HealthModel;

/**
* Class DashboardSubscriber.
*/
class DashboardSubscriber extends MainDashboardSubscriber
{
/**
* Define the name of the bundle/category of the widget(s).
*
* @var string
*/
protected $bundle = 'campaign';

/**
* Define the widget(s).
*
* @var string
*/
protected $types = [
'campaign.health' => [],
];

/**
* @var HealthModel
*/
protected $healthModel;

/**
* DashboardSubscriber constructor.
*
* @param HealthModel $healthModel
*/
public function __construct(HealthModel $healthModel)
{
$this->healthModel = $healthModel;
}

/**
* Set a widget detail when needed.
*
* @param WidgetDetailEvent $event
*/
public function onWidgetDetailGenerate(WidgetDetailEvent $event)
{
// This always pulls from cached data from the cron task.
$cache = $this->healthModel->getCache();
$widget = $event->getWidget();
if ($widget->getHeight() < 330) {
$widget->setHeight(330);
}
$params = $widget->getParams();
$data = [];
$data['params'] = $params;
$data['height'] = $widget->getHeight();
$data['delays'] = isset($cache['delays']) ? $cache['delays'] : [];
$data['lastCached'] = isset($cache['lastCached']) ? $cache['lastCached'] : null;
$event->setTemplateData(['data' => $data]);

if ('campaign.health' == $event->getType()) {
$event->setTemplate('MauticHealthBundle:Widgets:health.html.php');
$event->stopPropagation();
}
}
}
42 changes: 32 additions & 10 deletions Integration/HealthIntegration.php
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@

/*
* @copyright 2018 Mautic Contributors. All rights reserved
* @author Mautic, Inc
* @author Digital Media Solutions, LLC
*
* @link http://mautic.org
*
@@ -74,7 +74,7 @@ public function setComponentStatus($incidentStatus = null, $componentStatus = nu
}
if ($change) {
// Update/Close the incident.
if (!empty($lastUpdate)) {
if (!empty($lastUpdate) && is_array($lastUpdate['affected_components'])) {
foreach ($lastUpdate['affected_components'] as $affectedComponent) {
if (!empty($affectedComponent['id'])) {
$componentIds[] = $affectedComponent['id'];
@@ -368,25 +368,47 @@ public function getRequiredKeyFields()
public function appendToForm(&$builder, $data, $formArea)
{
if ('features' == $formArea) {
// $builder->add(
// 'campaign_rebuild_delay',
// 'number',
// [
// 'label' => $this->translator->trans('mautic.health.campaign_rebuild_delay'),
// 'data' => !isset($data['campaign_rebuild_delay']) ? 10000 : $data['campaign_rebuild_delay'],
// 'attr' => [
// 'tooltip' => $this->translator->trans('mautic.health.campaign_rebuild_delay.tooltip'),
// ],
// ]
// );
$builder->add(
'campaign_rebuild_threshold',
'campaign_kickoff_delay',
'number',
[
'label' => $this->translator->trans('mautic.health.campaign_rebuild_threshold'),
'data' => !isset($data['campaign_rebuild_threshold']) ? 10000 : $data['campaign_rebuild_threshold'],
'label' => $this->translator->trans('mautic.health.campaign_kickoff_delay'),
'data' => !isset($data['campaign_kickoff_delay']) ? 3600 : $data['campaign_kickoff_delay'],
'attr' => [
'tooltip' => $this->translator->trans('mautic.health.campaign_rebuild_threshold.tooltip'),
'tooltip' => $this->translator->trans('mautic.health.campaign_kickoff_delay.tooltip'),
],
]
);
$builder->add(
'campaign_trigger_threshold',
'campaign_scheduled_delay',
'number',
[
'label' => $this->translator->trans('mautic.health.campaign_trigger_threshold'),
'data' => !isset($data['campaign_trigger_threshold']) ? 1000 : $data['campaign_trigger_threshold'],
'label' => $this->translator->trans('mautic.health.campaign_scheduled_delay'),
'data' => !isset($data['campaign_scheduled_delay']) ? 3600 : $data['campaign_scheduled_delay'],
'attr' => [
'tooltip' => $this->translator->trans('mautic.health.campaign_trigger_threshold.tooltip'),
'tooltip' => $this->translator->trans('mautic.health.campaign_scheduled_delay.tooltip'),
],
]
);
$builder->add(
'campaign_inactive_delay',
'number',
[
'label' => $this->translator->trans('mautic.health.campaign_inactive_delay'),
'data' => !isset($data['campaign_inactive_delay']) ? 3600 : $data['campaign_inactive_delay'],
'attr' => [
'tooltip' => $this->translator->trans('mautic.health.campaign_inactive_delay.tooltip'),
],
]
);
2 changes: 1 addition & 1 deletion MauticHealthBundle.php
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@

/*
* @copyright 2018 Mautic Contributors. All rights reserved
* @author Mautic, Inc
* @author Digital Media Solutions, LLC
*
* @link http://mautic.org
*
398 changes: 320 additions & 78 deletions Model/HealthModel.php

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Mautic Health [![Latest Stable Version](https://poser.pugx.org/thedmsgroup/mautic-health-bundle/v/stable)](https://packagist.org/packages/thedmsgroup/mautic-health-bundle) [![License](https://poser.pugx.org/thedmsgroup/mautic-health-bundle/license)](https://packagist.org/packages/thedmsgroup/mautic-health-bundle) [![Build Status](https://travis-ci.org/TheDMSGroup/mautic-health.svg?branch=master)](https://travis-ci.org/TheDMSGroup/mautic-health)
# Mautic Health [![Latest Stable Version](https://poser.pugx.org/thedmsgroup/mautic-health-bundle/v/stable)](https://packagist.org/packages/thedmsgroup/mautic-health-bundle) [![License](https://poser.pugx.org/thedmsgroup/mautic-health-bundle/license)](https://packagist.org/packages/thedmsgroup/mautic-health-bundle) [![Build Status](https://travis-ci.com/TheDMSGroup/mautic-health.svg?branch=master)](https://travis-ci.com/TheDMSGroup/mautic-health)
![](./Assets/img/health.png)

Checks the health of the Mautic instance, optionally reporting to statuspage.io.
15 changes: 11 additions & 4 deletions Translations/en_US/messages.ini
Original file line number Diff line number Diff line change
@@ -6,7 +6,14 @@ mautic.health.statuspage_id = "Statuspage Page ID"
mautic.health.statuspage_secret = "Statuspage User API Key"
mautic.health.campaign_rebuild_threshold = "Campaign rebuild threshold"
mautic.health.campaign_rebuild_threshold.tooltip = "The maximum number of contacts waiting to be ingested into a campaign from a segment."
mautic.health.campaign_trigger_threshold = "Campaign trigger threshold"
mautic.health.campaign_trigger_threshold.tooltip = "The maximum number of contacts waiting for scheduled campaign events to fire which are late."
mautic.health.statuspage_component_incidents = "Statuspage incedents"
mautic.health.statuspage_component_incidents.tooltip = "In addition to updating component statuses, automatically create/update/close incedents for more detailed information."
mautic.health.campaign_kickoff_threshold = "Max kickoff event delay"
mautic.health.campaign_kickoff_threshold.tooltip = "The maximum number of seconds average allowed for kickoff events at the top of the campaign."
mautic.health.campaign_scheduled_threshold = "Max scheduled event delay"
mautic.health.campaign_scheduled_threshold.tooltip = "The maximum number of seconds average allowed for scheduled events (beyond the intended delays)."
mautic.health.campaign_inactive_threshold = "Max inactive event delay"
mautic.health.campaign_inactive_threshold.tooltip = "The maximum number of seconds average allowed for inactive events (decisions)."
mautic.health.statuspage_component_incidents = "Statuspage incidents"
mautic.health.statuspage_component_incidents.tooltip = "In addition to updating component statuses, automatically create/update/close incidents for more detailed information."
mautic.health.kickoff = "Running kickoff checks"
mautic.health.scheduled = "Running scheduled checks"
mautic.widget.campaign.health = "Processing Delays"
56 changes: 56 additions & 0 deletions Views/Widgets/health.html.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php

/*
* @copyright 2019 Mautic Contributors. All rights reserved
* @author Digital Media Solutions, LLC
*
* @link http://mautic.org
*
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/

?>

<div class="chart-wrapper" style="height:<?php echo $data['height'] - 66; ?>px; overflow-y: auto;">
<div class="pt-sd pr-md pb-md pl-md">
<?php if (count($data['delays'])): ?>
<div id="health-status-table">
<div class="responsive-table">
<table id="health-status" class="table table-striped table-bordered" width="100%" data-height="<?php echo $data['height']; ?>">
<thead>
<th>Campaign</th>
<th>Campaign ID</th>
<th>Event</th>
<th>Event ID</th>
<th>Type</th>
<th>Contacts</th>
<th>Delay</th>
</thead>
<tbody>
<?php foreach ($data['delays'] as $delay): ?>
<tr>
<th>
<a href="/s/campaigns/view/<?php echo $delay['campaign_id']; ?>"><?php echo $delay['campaign_name']; ?></a>
</th>
<th><?php echo $delay['campaign_id']; ?></th>
<th><?php echo $delay['event_name']; ?></th>
<th><?php echo $delay['event_id']; ?></th>
<th><?php echo $delay['type']; ?></th>
<th><?php echo $delay['contact_count']; ?></th>
<th><?php echo $delay['avg_delay_s']; ?>s</th>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
<?php if (!empty($data['lastCached'])) {
echo '<small>Calculated: '.(new \DateTime('@'.$data['lastCached']))->format('c').'</small>';
}
?>
<?php else: ?>
<h3>No delays detected</h3>
<?php endif; ?>
</div>
</div>

8 changes: 1 addition & 7 deletions composer.json
Original file line number Diff line number Diff line change
@@ -4,13 +4,7 @@
"keywords": ["mautic","marketing","marketing automation","plugin"],
"type": "mautic-plugin",
"require": {
"mautic/composer-plugin": "^1.0",
"mustache/mustache": "^2.12",
"namshi/cuzzle": "^2.0",
"league/flysystem": "^1.0",
"league/flysystem-aws-s3-v2": "^1.0",
"league/flysystem-dropbox": "^1.0",
"league/flysystem-sftp": "^1.0"
"mautic/composer-plugin": "^1.0"
},
"license": "GPL-3.0-only",
"authors": [