package com.java21days.bots; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.text.NumberFormat; import java.util.Date; import java.util.Locale; public class FreeSpaceBot { protected void start() { ServerSocket serverSocket = null; System.out.println("Waiting for connection on port 8011 ..."); while (true) { try { if (serverSocket == null) { // attempt to create the server socket serverSocket = new ServerSocket(8011); } // wait for an incoming connection Socket socket = serverSocket.accept(); // make the connection InputStream stream = socket.getInputStream(); BufferedReader reader = new BufferedReader( new InputStreamReader(stream)); // retrieve the request headers String header = null; while ((header = reader.readLine()).length() != 0) { System.out.println(header); } // retrieve the request body StringBuilder body = new StringBuilder(); while (reader.ready()) { body.append((char) reader.read()); } System.out.println("\n" + body.toString() + "\n"); // create an output writer PrintWriter writer = new PrintWriter(new BufferedOutputStream( socket.getOutputStream()), false); // send output headers writer.println( "HTTP/1.0 200 OK\r\n" + "Date: " + new Date() + "\r\n" + "Server: WebServer2/1.0\r\n" + "Content-Type: application/json\r\n" + "\r\n" ); // collect information on free disk space File[] root = File.listRoots(); String free = formatNumber(root[0].getFreeSpace()); String total = formatNumber(root[0].getTotalSpace()); double percent = Math.floor( (double) root[0].getFreeSpace() / (double) root[0].getTotalSpace() * 100D); String message = "The server has " + free + " bytes free out of " + total + " total (" + percent + "%)."; String sub = (percent < 10) ? "Running low!" : "Looking good!"; // send the output body (as JSON) writer.println("{\"text\": \"" + message + "\"," + "\"attachments\": [{\"text\":\"" + sub + "\"}]}"); writer.flush(); // close the stream to send the response stream.close(); } catch (IOException ioe) { System.out.println("Error: " + ioe.getMessage()); } } } // format a large number with commas private String formatNumber(long input) { return NumberFormat.getNumberInstance(Locale.US).format(input); } public static void main(String arguments[]) { FreeSpaceBot bot = new FreeSpaceBot(); bot.start(); } }