diff --git a/scripts/analysis/parse-logs.py b/scripts/analysis/parse-logs.py
index f0f693a1de192717caf2e74749bc131dd9bd7716..ec3dcc96430fb63fcc511fbac0d8d3c025e7ca26 100755
--- a/scripts/analysis/parse-logs.py
+++ b/scripts/analysis/parse-logs.py
@@ -40,6 +40,7 @@ from transformer.server import ServerLogFilter
 # find . -type d -depth 1 -print0 | \
 # xargs -0 -L1 -P8 -I {} \
 # bash -c 'cd {} && echo {} && ../../heterogeneous-smr/scripts/parse-results.py'
+from transformer.server_channel import ServerChannelLogFilter
 
 AUTO_RANGE_SLACK_AT_END = 5
 
@@ -70,6 +71,7 @@ def setup_transformers(path: str) -> Iterable[Transformer]:
         LatencyLogFilter(),
         ResourceLogFilter(),
         ServerLogFilter(),
+        ServerChannelLogFilter(),
         PrintWarningsFilter(),
         # FIXME Add transformer to check for required logs
         # OutputJSONTransformer(path),
@@ -208,7 +210,7 @@ def auto_range(logs: List[LogData]) -> Tuple[float, float, float]:
     end = -base
 
     for log in logs:
-        if log.logtype != "client":
+        if not is_auto_range_log(log):
             continue
 
         for entry in log.entries():
diff --git a/scripts/analysis/transformer/server_channel.py b/scripts/analysis/transformer/server_channel.py
new file mode 100644
index 0000000000000000000000000000000000000000..b72bd77640841e38651336b107f2e12a6952d843
--- /dev/null
+++ b/scripts/analysis/transformer/server_channel.py
@@ -0,0 +1,41 @@
+from common.log import LogData
+from .base import Filter
+
+
+class ServerChannelLogFilter(Filter):
+    def can_handle(self, log: LogData) -> bool:
+        return log.logtype == "server" and "channel-micro" in log.scenario \
+               and log.logid in ("server-4", "server-5", "server-6")
+
+    def filter(self, log: LogData, start_time: float, end_time: float) -> LogData:
+        out = log.derive()
+        first = None
+        last = None
+
+        for entry in log.entries():
+            if "warning" in entry:
+                line = entry["warning"]
+                if "CMIC-DST:" in line:
+                    p = line.split(" ")
+                    messages = int(p[-1])
+                    entry = out.add_data(entry["timestamp"], messages=messages)
+
+                    if first is None and entry["timestamp"] >= start_time:
+                        first = entry
+                    if entry["timestamp"] < end_time:
+                        last = entry
+
+            out.add_entry(entry)
+
+        message_delta = 0
+        time_delta = 0.
+        throughput = 0.
+
+        if last is not None and first is not None and last["timestamp"] - first["timestamp"] > 10:
+            time_delta = last["timestamp"] - first["timestamp"]
+            message_delta = last["messages"] - first["messages"]
+            throughput = message_delta / time_delta
+
+        out.add_data((start_time + end_time) / 2, message_delta=message_delta, time_delta=time_delta,
+                     throughput=throughput)
+        return out