code: def get_available_plugins(self):
          
          available_plugins = []
          PluginData = namedtuple('PluginData', 'name, plugin_class, conf, is_allowed_to_fail')
          for plugin_request in self.plugins_conf:
              plugin_name = plugin_request['name']
              try:
                  plugin_class = self.plugin_classes[plugin_name]
              except KeyError:
                  if plugin_request.get('required', True):
                      msg = ("no such plugin: '%s', did you set "
                             "the correct plugin type?") % plugin_name
                      exc = PluginFailedException(msg)
                      self.on_plugin_failed(plugin_name, exc)
                      logger.error(msg)
                      raise exc
                  else:
                      # This plugin is marked as not being required
                      logger.warning("plugin '%s' requested but not available",
                                     plugin_name)
                      continue
              plugin_is_allowed_to_fail = plugin_request.get('is_allowed_to_fail',
                                                             getattr(plugin_class,
                                                                     "is_allowed_to_fail", True))
              plugin_conf = plugin_request.get("args", {})
              plugin = PluginData(plugin_name,
                                  plugin_class,
                                  plugin_conf,
                                  plugin_is_allowed_to_fail)
              available_plugins.append(plugin)
          return available_plugins
docs: check requested plugins availability
          and handle missing plugins
  
          :return: list of namedtuples, runnable plugins data