prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Dmesg combiner always succeeds
  The [Dmesg combiner has only optional dependencies](https://github.com/RedHatInsights/insights-core/blob/master/insights/combiners/dmesg.py#L51), which means it always succeeds. This is an anti-pattern.
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `insights/combiners/dmesg.py`
  Content:
  ```
  1 """
  2 Dmesg
  3 =====
  4 
  5 Combiner for Dmesg information. It uses the results of the following parsers (if they are present):
  6 :class:`insights.parsers.dmesg.DmesgLineList`,
  7 :class:`insights.parsers.dmesg_log.DmesgLog`
  8 
  9 Typical output of the ``/var/log/dmesg`` file is::
  10 
  11 [    0.000000] Initializing cgroup subsys cpu
  12 [    0.000000] Linux version 3.10.0-862.el7.x86_64 (mockbuild@x86-034.build.eng.bos.redhat.com) \
  13 (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Wed Mar 21 18:14:51 EDT 2018
  14 [    2.090905] SELinux:  Completing initialization.
  15 [    2.090907] SELinux:  Setting up existing superblocks.
  16 [    2.099684] systemd[1]: Successfully loaded SELinux policy in 82.788ms.
  17 [    2.117410] ip_tables: (C) 2000-2006 Netfilter Core Team
  18 [    2.117429] systemd[1]: Inserted module 'ip_tables'
  19 [    2.376551] systemd-journald[441]: Received request to flush runtime journal from PID 1
  20 [    2.716874] cryptd: max_cpu_qlen set to 100
  21 [    2.804152] AES CTR mode by8 optimization enabled
  22 
  23 Typical output of the ``dmesg`` command is::
  24 
  25 [    2.939498] [TTM] Initializing pool allocator
  26 [    2.939502] [TTM] Initializing DMA pool allocator
  27 [    2.940800] [drm] fb mappable at 0xFC000000
  28 [    2.940947] fbcon: cirrusdrmfb (fb0) is primary device
  29 [    2.957375] Console: switching to colour frame buffer device 128x48
  30 [    2.959322] cirrus 0000:00:02.0: fb0: cirrusdrmfb frame buffer device
  31 [    2.959334] [drm] Initialized cirrus 1.0.0 20110418 for 0000:00:02.0 on minor 0
  32 [    3.062459] XFS (vda1): Ending clean mount
  33 [    5.048484] ip6_tables: (C) 2000-2006 Netfilter Core Team
  34 [    5.102434] Ebtables v2.0 registered
  35 
  36 
  37 Examples:
  38     >>> dmesg.dmesg_cmd_available
  39     True
  40     >>> dmesg.dmesg_log_available
  41     True
  42     >>> dmesg.dmesg_log_wrapped
  43     False
  44 """
  45 
  46 from insights.core.plugins import combiner
  47 from insights.parsers.dmesg import DmesgLineList
  48 from insights.parsers.dmesg_log import DmesgLog
  49 
  50 
  51 @combiner(optional=[DmesgLineList, DmesgLog])
  52 class Dmesg(object):
  53     """
  54     Combiner for ``dmesg`` command and ``/var/log/dmesg`` file.
  55     """
  56 
  57     def __init__(self, dmesg_cmd, dmesg_log):
  58         if dmesg_cmd is not None:
  59             self.dmesg_cmd_available = True
  60             self.dmesg_cmd = dmesg_cmd
  61             self.dmesg_cmd_wrapped = True if 'Linux version' not in dmesg_cmd else False
  62         else:
  63             self.dmesg_cmd_available = False
  64 
  65         if dmesg_log is not None:
  66             self.dmesg_log_available = True
  67             self.dmesg_log = dmesg_log
  68             self.dmesg_log_wrapped = True if 'Linux version' not in dmesg_log else False
  69         else:
  70             self.dmesg_log_available = False
  71
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/insights/combiners/dmesg.py b/insights/combiners/dmesg.py
  --- a/insights/combiners/dmesg.py
  +++ b/insights/combiners/dmesg.py
  @@ -48,7 +48,7 @@
   from insights.parsers.dmesg_log import DmesgLog
   
   
  -@combiner(optional=[DmesgLineList, DmesgLog])
  +@combiner([DmesgLineList, DmesgLog])
   class Dmesg(object):
       """
       Combiner for ``dmesg`` command and ``/var/log/dmesg`` file.
  
verification_info: {"golden_diff": "diff --git a/insights/combiners/dmesg.py b/insights/combiners/dmesg.py\n--- a/insights/combiners/dmesg.py\n+++ b/insights/combiners/dmesg.py\n@@ -48,7 +48,7 @@\n from insights.parsers.dmesg_log import DmesgLog\n \n \n-@combiner(optional=[DmesgLineList, DmesgLog])\n+@combiner([DmesgLineList, DmesgLog])\n class Dmesg(object):\n     \"\"\"\n     Combiner for ``dmesg`` command and ``/var/log/dmesg`` file.\n", "issue": "Dmesg combiner always succeeds\nThe [Dmesg combiner has only optional dependencies](https://github.com/RedHatInsights/insights-core/blob/master/insights/combiners/dmesg.py#L51), which means it always succeeds. This is an anti-pattern.\n", "before_files": [{"content": "\"\"\"\nDmesg\n=====\n\nCombiner for Dmesg information. It uses the results of the following parsers (if they are present):\n:class:`insights.parsers.dmesg.DmesgLineList`,\n:class:`insights.parsers.dmesg_log.DmesgLog`\n\nTypical output of the ``/var/log/dmesg`` file is::\n\n[    0.000000] Initializing cgroup subsys cpu\n[    0.000000] Linux version 3.10.0-862.el7.x86_64 (mockbuild@x86-034.build.eng.bos.redhat.com) \\\n(gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Wed Mar 21 18:14:51 EDT 2018\n[    2.090905] SELinux:  Completing initialization.\n[    2.090907] SELinux:  Setting up existing superblocks.\n[    2.099684] systemd[1]: Successfully loaded SELinux policy in 82.788ms.\n[    2.117410] ip_tables: (C) 2000-2006 Netfilter Core Team\n[    2.117429] systemd[1]: Inserted module 'ip_tables'\n[    2.376551] systemd-journald[441]: Received request to flush runtime journal from PID 1\n[    2.716874] cryptd: max_cpu_qlen set to 100\n[    2.804152] AES CTR mode by8 optimization enabled\n\nTypical output of the ``dmesg`` command is::\n\n[    2.939498] [TTM] Initializing pool allocator\n[    2.939502] [TTM] Initializing DMA pool allocator\n[    2.940800] [drm] fb mappable at 0xFC000000\n[    2.940947] fbcon: cirrusdrmfb (fb0) is primary device\n[    2.957375] Console: switching to colour frame buffer device 128x48\n[    2.959322] cirrus 0000:00:02.0: fb0: cirrusdrmfb frame buffer device\n[    2.959334] [drm] Initialized cirrus 1.0.0 20110418 for 0000:00:02.0 on minor 0\n[    3.062459] XFS (vda1): Ending clean mount\n[    5.048484] ip6_tables: (C) 2000-2006 Netfilter Core Team\n[    5.102434] Ebtables v2.0 registered\n\n\nExamples:\n    >>> dmesg.dmesg_cmd_available\n    True\n    >>> dmesg.dmesg_log_available\n    True\n    >>> dmesg.dmesg_log_wrapped\n    False\n\"\"\"\n\nfrom insights.core.plugins import combiner\nfrom insights.parsers.dmesg import DmesgLineList\nfrom insights.parsers.dmesg_log import DmesgLog\n\n\n@combiner(optional=[DmesgLineList, DmesgLog])\nclass Dmesg(object):\n    \"\"\"\n    Combiner for ``dmesg`` command and ``/var/log/dmesg`` file.\n    \"\"\"\n\n    def __init__(self, dmesg_cmd, dmesg_log):\n        if dmesg_cmd is not None:\n            self.dmesg_cmd_available = True\n            self.dmesg_cmd = dmesg_cmd\n            self.dmesg_cmd_wrapped = True if 'Linux version' not in dmesg_cmd else False\n        else:\n            self.dmesg_cmd_available = False\n\n        if dmesg_log is not None:\n            self.dmesg_log_available = True\n            self.dmesg_log = dmesg_log\n            self.dmesg_log_wrapped = True if 'Linux version' not in dmesg_log else False\n        else:\n            self.dmesg_log_available = False\n", "path": "insights/combiners/dmesg.py"}], "after_files": [{"content": "\"\"\"\nDmesg\n=====\n\nCombiner for Dmesg information. It uses the results of the following parsers (if they are present):\n:class:`insights.parsers.dmesg.DmesgLineList`,\n:class:`insights.parsers.dmesg_log.DmesgLog`\n\nTypical output of the ``/var/log/dmesg`` file is::\n\n[    0.000000] Initializing cgroup subsys cpu\n[    0.000000] Linux version 3.10.0-862.el7.x86_64 (mockbuild@x86-034.build.eng.bos.redhat.com) \\\n(gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Wed Mar 21 18:14:51 EDT 2018\n[    2.090905] SELinux:  Completing initialization.\n[    2.090907] SELinux:  Setting up existing superblocks.\n[    2.099684] systemd[1]: Successfully loaded SELinux policy in 82.788ms.\n[    2.117410] ip_tables: (C) 2000-2006 Netfilter Core Team\n[    2.117429] systemd[1]: Inserted module 'ip_tables'\n[    2.376551] systemd-journald[441]: Received request to flush runtime journal from PID 1\n[    2.716874] cryptd: max_cpu_qlen set to 100\n[    2.804152] AES CTR mode by8 optimization enabled\n\nTypical output of the ``dmesg`` command is::\n\n[    2.939498] [TTM] Initializing pool allocator\n[    2.939502] [TTM] Initializing DMA pool allocator\n[    2.940800] [drm] fb mappable at 0xFC000000\n[    2.940947] fbcon: cirrusdrmfb (fb0) is primary device\n[    2.957375] Console: switching to colour frame buffer device 128x48\n[    2.959322] cirrus 0000:00:02.0: fb0: cirrusdrmfb frame buffer device\n[    2.959334] [drm] Initialized cirrus 1.0.0 20110418 for 0000:00:02.0 on minor 0\n[    3.062459] XFS (vda1): Ending clean mount\n[    5.048484] ip6_tables: (C) 2000-2006 Netfilter Core Team\n[    5.102434] Ebtables v2.0 registered\n\n\nExamples:\n    >>> dmesg.dmesg_cmd_available\n    True\n    >>> dmesg.dmesg_log_available\n    True\n    >>> dmesg.dmesg_log_wrapped\n    False\n\"\"\"\n\nfrom insights.core.plugins import combiner\nfrom insights.parsers.dmesg import DmesgLineList\nfrom insights.parsers.dmesg_log import DmesgLog\n\n\n@combiner([DmesgLineList, DmesgLog])\nclass Dmesg(object):\n    \"\"\"\n    Combiner for ``dmesg`` command and ``/var/log/dmesg`` file.\n    \"\"\"\n\n    def __init__(self, dmesg_cmd, dmesg_log):\n        if dmesg_cmd is not None:\n            self.dmesg_cmd_available = True\n            self.dmesg_cmd = dmesg_cmd\n            self.dmesg_cmd_wrapped = True if 'Linux version' not in dmesg_cmd else False\n        else:\n            self.dmesg_cmd_available = False\n\n        if dmesg_log is not None:\n            self.dmesg_log_available = True\n            self.dmesg_log = dmesg_log\n            self.dmesg_log_wrapped = True if 'Linux version' not in dmesg_log else False\n        else:\n            self.dmesg_log_available = False\n", "path": "insights/combiners/dmesg.py"}]}