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()

```

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.

{"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"}]}