Open Data Catalog v2.0.0
Import.php
Go to the documentation of this file.
1 <?php
2 
4 
5 use Drupal\Core\Queue\QueueWorkerBase;
6 use Drupal\Core\Logger\RfcLogLevel;
7 use Procrastinator\Result;
8 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
9 use Symfony\Component\DependencyInjection\ContainerInterface;
10 
20 class Import extends QueueWorkerBase implements ContainerFactoryPluginInterface {
21 
22  use \Drupal\Core\Logger\LoggerChannelTrait;
23 
24 
25  private $container;
26 
32  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
33  return new Import($configuration, $plugin_id, $plugin_definition, $container);
34  }
35 
48  public function __construct(array $configuration, $plugin_id, $plugin_definition, ContainerInterface $container) {
49  parent::__construct($configuration, $plugin_id, $plugin_definition);
50  $this->container = $container;
51  }
52 
56  public function processItem($data) {
57 
58  try {
60  $datastore = $this->container->get('dkan_datastore.service');
61 
62  $results = $datastore->import($data['uuid']);
63 
64  foreach ($results as $result) {
65  $this->processResult($result, $data);
66  }
67  }
68  catch (\Exception $e) {
69  $this->log(RfcLogLevel::ERROR,
70  "Import for {$data['uuid']} returned an error: {$e->getMessage()}");
71  }
72  }
73 
77  private function processResult(Result $result, $data) {
78  $level = RfcLogLevel::INFO;
79  $message = "";
80  $status = $result->getStatus();
81  switch ($status) {
82  case Result::STOPPED:
83  $newQueueItemId = $this->requeue($data);
84  $message = "Import for {$data['uuid']} is requeueing for iteration No. {$data['queue_iteration']}. (ID:{$newQueueItemId}).";
85  break;
86 
87  case Result::IN_PROGRESS:
88  case Result::ERROR:
89  $level = RfcLogLevel::ERROR;
90  $message = "Import for {$data['uuid']} returned an error: {$result->getError()}";
91  break;
92 
93  case Result::DONE:
94  $message = "Import for {$data['uuid']} completed.";
95  break;
96  }
97  $this->log($level, $message);
98  }
99 
103  protected function log($level, $message, array $context = []) {
104  $this->getLogger($this->getPluginId())
105  ->log($level, $message, $context);
106  }
107 
119  protected function requeue(array $data) {
120  return $this->container->get('queue')
121  ->get($this->getPluginId())
122  ->createItem($data);
123  }
124 
125 }
Drupal\dkan_datastore\Plugin\QueueWorker\Import\__construct
__construct(array $configuration, $plugin_id, $plugin_definition, ContainerInterface $container)
Definition: Import.php:48
Drupal\dkan_datastore\Plugin\QueueWorker\Import\log
log($level, $message, array $context=[])
Definition: Import.php:103
Drupal\dkan_datastore\Plugin\QueueWorker\Import
Definition: Import.php:20
Drupal\dkan_datastore\Plugin\QueueWorker\Import\requeue
requeue(array $data)
Definition: Import.php:119
Drupal\dkan_datastore\Plugin\QueueWorker\Import\create
static create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition)
Definition: Import.php:32
Drupal\dkan_datastore\Plugin\QueueWorker
Definition: Import.php:3