Index: trunk/FACT++/src/smartfact.cc
===================================================================
--- trunk/FACT++/src/smartfact.cc	(revision 14219)
+++ trunk/FACT++/src/smartfact.cc	(revision 14220)
@@ -21,4 +21,5 @@
 #include "Converter.h"
 #include "PixelMap.h"
+#include "DimWriteStatistics.h"
 
 #include "tools.h"
@@ -500,4 +501,6 @@
     EventHist   fErrorHist;
     EventHist   fChatHist;
+
+    uint64_t fFreeSpace;
 
     Sun   fSun;
@@ -1561,4 +1564,18 @@
     }
 
+    int HandleStats(const EventImp &d)
+    {
+        if (!CheckDataSize(d, "Stats", 4*8))
+        {
+            fFreeSpace = UINT64_MAX;
+            return GetCurrentState();
+        }
+
+        const DimWriteStatistics::Stats &s = d.Ref<DimWriteStatistics::Stats>();
+        fFreeSpace = s.freeSpace;
+
+        return GetCurrentState();
+    }
+
     int HandleFscTemperature(const EventImp &d)
     {
@@ -2097,4 +2114,6 @@
         newerr |= SetError(!fDimControl.online(),
                            "<b>dimctrl offline</b>");
+        newerr |= SetError(fDimDataLogger.state()<20 || fDimDataLogger.state()>40,
+                           "<b>datalogger not ready</b>");
 
         //newerr |= SetError(fDimDriveControl.state()==Drive::State::kLocked,
@@ -2148,4 +2167,7 @@
         newerr |= SetError(fLastRunFinishedWithZeroEvents,
                            "Last run finshed, but contained zero events.");
+
+        newerr |= SetError(fFreeSpace<50000000000,
+                           "Less than 50GB disk space left.");
 
         fLastRunFinishedWithZeroEvents = false;
@@ -2541,4 +2563,14 @@
             out << GetStateHtml(fDimSkypeClient,  1);
 
+            string col = HTML::kRed;
+            if (fFreeSpace>uint64_t(199999999999))
+                col = HTML::kYellow;
+            if (fFreeSpace>uint64_t(999999999999))
+                col = HTML::kGreen;
+            if (fFreeSpace==UINT64_MAX)
+                col = HTML::kWhite;
+
+            out << col << '\t' << Tools::Scientific(fFreeSpace) << "B\n";
+
             out << HTML::kGreen << '\t' << dt.str().substr(0, dt.str().length()-7) << '\n';
         }
@@ -2575,4 +2607,5 @@
         fRateScanDataId(0),
         fRateScanBoard(0),
+        fFreeSpace(UINT64_MAX),
         // ---
         fDimMcp         ("MCP"),
@@ -2658,4 +2691,9 @@
         Subscribe("FAD_CONTROL/EVENT_DATA")
             (bind(&StateMachineSmartFACT::HandleFadEventData,        this, placeholders::_1));
+        Subscribe("FAD_CONTROL/STATS")
+            (bind(&StateMachineSmartFACT::HandleStats,               this, placeholders::_1));
+
+        Subscribe("DATA_LOGGER/STATS")
+            (bind(&StateMachineSmartFACT::HandleStats,               this, placeholders::_1));
 
         Subscribe("FTM_CONTROL/TRIGGER_RATES")
