ballchaichana

serviceTip

Sep 28th, 2018
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.95 KB | None | 0 0
  1. package th.in.oneauthen.client;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.BufferedWriter;
  5. import java.io.ByteArrayInputStream;
  6. import java.io.File;
  7. import java.io.FileNotFoundException;
  8. import java.io.FileOutputStream;
  9. import java.io.FileReader;
  10. import java.io.FileWriter;
  11. import java.io.IOException;
  12. import java.io.InputStreamReader;
  13. import java.io.PrintStream;
  14. import java.io.PrintWriter;
  15. import java.net.URISyntaxException;
  16. import java.nio.file.Files;
  17. import java.nio.file.Paths;
  18. import java.nio.file.StandardOpenOption;
  19. import java.text.SimpleDateFormat;
  20. import java.util.Base64;
  21. import java.util.Date;
  22. import java.util.Locale;
  23.  
  24. import org.apache.http.HttpResponse;
  25. import org.apache.http.client.HttpClient;
  26. import org.apache.http.client.methods.HttpPost;
  27. import org.apache.http.client.utils.URIBuilder;
  28. import org.apache.http.entity.StringEntity;
  29. import org.apache.http.impl.client.HttpClientBuilder;
  30. import org.boris.winrun4j.AbstractService;
  31. import org.boris.winrun4j.ServiceException;
  32.  
  33. import com.google.gson.Gson;
  34. import com.google.gson.JsonObject;
  35. import com.google.gson.JsonParser;
  36. import com.google.gson.stream.JsonReader;
  37. import com.itextpdf.text.pdf.PdfReader;
  38.  
  39. public class FolderMonitoring extends AbstractService {
  40.     public static final String CONFIG_FILE = "config.json";
  41.  
  42.     private volatile boolean shutdown = false;
  43.  
  44.     public int doRequest(int request) throws ServiceException {
  45.         switch (request) {
  46.         case SERVICE_CONTROL_STOP:
  47.         case SERVICE_CONTROL_SHUTDOWN:
  48.             shutdown = true;
  49.             break;
  50.         }
  51.         return 0;
  52.     }
  53.  
  54.     public int getControlsAccepted() {
  55.         return 0;
  56.     }
  57.  
  58.     public String getName() {
  59.         return "One Authen Signing Application Client";
  60.     }
  61.  
  62.     public String getDescription() {
  63.         return "One Authen Signing Application Client.";
  64.     }
  65.  
  66.     public static void main(String[] args) {
  67.         try {
  68.             new FolderMonitoring().serviceMain(args);
  69.         } catch (Exception e) {
  70.             e.printStackTrace();
  71.         }
  72.     }
  73.  
  74.     @Override
  75.     public int serviceMain(String[] args) throws ServiceException {
  76.         ServiceConfiguration serviceConfig = new ServiceConfiguration();
  77.         File monitorFolder = null;
  78.         File logFile = null;
  79.         try {
  80.             Gson gsonUtil = new Gson();
  81.             JsonReader reader = new JsonReader(new FileReader(new File(CONFIG_FILE)));
  82.  
  83.             serviceConfig = gsonUtil.fromJson(reader, ServiceConfiguration.class);
  84.             if (serviceConfig == null)
  85.                 throw new Exception("Invalid service configuration");
  86.  
  87.             monitorFolder = new File(serviceConfig.getMonitoringFolder());
  88.             if ((!monitorFolder.exists()) || (!monitorFolder.isDirectory())) {
  89.                 throw new Exception("Invalid monitoring folder configuration:" + monitorFolder.getAbsolutePath());
  90.             }
  91.  
  92.             if (!new File(serviceConfig.getLogFolder()).exists()) {
  93.                 throw new Exception("Invalid log folder configuration");
  94.             } else {
  95.                 logFile = new File(serviceConfig.getLogFolder(), "service.log");
  96.             }
  97.         } catch (Exception e) {
  98.             e.printStackTrace();
  99.             return -1;
  100.         }
  101.  
  102.         System.out.println(serviceConfig.getMonitoringFolder());
  103.         while (!shutdown) {
  104.             // at this step, monitoring folder already validate that it is exist and it is a
  105.             // folder.
  106.             // do file list inside folder
  107.             // System.out.println(serviceConfig.getOutputFolder());
  108.             File[] fileList = monitorFolder.listFiles();
  109.             long start = System.currentTimeMillis();
  110.             // System.out.println(serviceConfig.getMonitoringFolder());
  111.             try {
  112.                 if (fileList.length > 0) {
  113.                     // System.out.println(fileList.length );
  114.                     for (File file : fileList) {
  115.                         if (file.isFile()) {
  116.                             System.out.println(file.getName());
  117.  
  118.                             byte[] input_file;
  119.                             try {
  120.                                 input_file = Files.readAllBytes(Paths.get(file.getPath()));
  121.                                 long subTask = System.currentTimeMillis();
  122.                                 byte[] encodedBytes = Base64.getEncoder().encode(input_file);
  123.  
  124.                                 try {
  125.                                     PdfReader reader = new PdfReader(new ByteArrayInputStream(input_file));
  126.                                     System.out.println(reader.getEofPos());
  127.  
  128.                                     String encodedStringPdf = new String(encodedBytes);
  129.                                     System.out.println(
  130.                                             "subTask EncodeOriginalPDF : " + (System.currentTimeMillis() - subTask));
  131.  
  132.                                     // read config file and get value
  133.                                     String access_token = serviceConfig.getAccessToken();
  134.                                     String profileIdStr = serviceConfig.getProfileId();
  135.                                     int profileId = Integer.parseInt(profileIdStr);
  136.  
  137.                                     JsonObject json = new JsonObject();
  138.                                     json.addProperty("profileId", profileId);
  139.                                     json.addProperty("accessToken", access_token);
  140.                                     json.addProperty("pdfData", encodedStringPdf);
  141.                                     ////////////////////////////////////////////////////////////////
  142.  
  143.                                     // send to api p'pae
  144.  
  145.                                     BufferedReader br = null;
  146.                                     String output;
  147.                                     StringBuilder responseBuilder = null;
  148.  
  149.                                     HttpClient httpClient = HttpClientBuilder.create().build();
  150.                                     URIBuilder uriBuilder;
  151.  
  152.                                     subTask = System.currentTimeMillis();
  153.  
  154.                                     try {
  155.                                         uriBuilder = new URIBuilder(serviceConfig.getUrlPath());
  156.                                         HttpPost postMethod = new HttpPost(uriBuilder.build());
  157.                                         StringEntity params = new StringEntity(json.toString());
  158.  
  159.                                         postMethod.addHeader("content-type", "application/json");
  160.                                         postMethod.setEntity(params);
  161.  
  162.                                         HttpResponse httpResponse = httpClient.execute(postMethod);
  163.                                         int responseCode = httpResponse.getStatusLine().getStatusCode();
  164.                                         if (responseCode == 201 || responseCode == 200) {
  165.                                             br = new BufferedReader(
  166.                                                     new InputStreamReader((httpResponse.getEntity().getContent())));
  167.                                             responseBuilder = new StringBuilder();
  168.                                             while ((output = br.readLine()) != null) {
  169.                                                 responseBuilder.append(output);
  170.                                             }
  171.  
  172.                                         } else {
  173.                                             System.out.println("Failed : HTTP error code : "
  174.                                                     + httpResponse.getStatusLine().getStatusCode());
  175.                                         }
  176.                                         System.out.println("subTask2 API request-response : "
  177.                                                 + (System.currentTimeMillis() - subTask));
  178.                                         // get response from api p'pae
  179.                                         // System.out.println(responseBuilder.toString());
  180.                                         String get_response = responseBuilder.toString();
  181.                                         JsonObject json_response = new JsonParser().parse(get_response)
  182.                                                 .getAsJsonObject();
  183.                                         String responseMessage = json_response.get("responseMessage").getAsString();
  184.                                         String statusCodeStr = json_response.get("responseCode").getAsString();
  185.                                         int statusCode = Integer.parseInt(statusCodeStr);
  186.                                         subTask = System.currentTimeMillis();
  187.  
  188.                                         // success case
  189.                                         if (statusCode == 0) {
  190.                                             String pdfDataResponse = json_response.get("pdfData").getAsString();
  191.                                             // decoder pdf from response
  192.                                             byte[] decodedBytes = Base64.getDecoder()
  193.                                                     .decode(pdfDataResponse.getBytes());
  194.                                             System.out.println(
  195.                                                     "subTask3 Decode: " + (System.currentTimeMillis() - subTask));
  196.                                             subTask = System.currentTimeMillis();
  197.                                             FileOutputStream fos = new FileOutputStream(
  198.                                                     new File(serviceConfig.getOutputFolder(), file.getName()));
  199.                                             fos.write(decodedBytes);
  200.                                             fos.flush();
  201.                                             fos.close();
  202.                                             System.out.println("subTask4 WriteSignPDF : "
  203.                                                     + (System.currentTimeMillis() - subTask));
  204.                                             // totaltime and file size
  205.                                             long totalTime = System.currentTimeMillis() - start;
  206.                                             long fileSize = file.length();
  207.                                             // create .txt for log
  208.                                             String STATUS = responseMessage;
  209.                                             String log = STATUS + ":" + file.getName();
  210.                                             logServer(log, serviceConfig.getLogFolder(), totalTime, fileSize);
  211.  
  212.                                             // delete old file
  213.                                             try {
  214.                                                 Files.delete(Paths.get(file.getPath()));
  215.                                             } catch (IOException e) {
  216.                                                 System.out.println("error can not delete old file in success");
  217.                                                 e.printStackTrace();
  218.                                             }
  219.  
  220.                                         } else {
  221.                                             // move file to folder fail
  222.                                             try {
  223.                                                 file.renameTo(new File(serviceConfig.getFailFolder(), file.getName()));
  224.                                             } catch (Exception e) {
  225.                                                 // TODO Auto-generated catch block
  226.                                                 e.printStackTrace();
  227.                                             }
  228.                                             // totaltime and file size
  229.                                             long totalTime = System.currentTimeMillis() - start;
  230.                                             long fileSize = file.length();
  231.                                             // create .txt for log
  232.                                             String STATUS = responseMessage;
  233.                                             String log = STATUS + ":" + file.getName();
  234.                                             logServer(log, serviceConfig.getLogFolder(), totalTime, fileSize);
  235.  
  236.                                             try {
  237.                                                 Files.delete(Paths.get(file.getPath()));
  238.                                             } catch (Exception e) {
  239.                                                 System.out.println("error can not delete old file in fail");
  240.                                                 e.printStackTrace();
  241.                                             }
  242.  
  243.                                         }
  244.  
  245.                                     } catch (URISyntaxException e1) {
  246.  
  247.                                         System.out.println("can not connect to url :" + serviceConfig.getUrlPath());
  248.                                         e1.printStackTrace();
  249.                                     }
  250.                                 } catch (Exception e) {
  251.                                     // TODO Auto-generated catch block
  252.                                     e.printStackTrace();
  253.                                 }
  254.                             } catch (IOException e) {
  255.                                 System.out.println("error can not read file");
  256.                                 e.printStackTrace();
  257.                             }
  258.  
  259.                         } else {
  260.                             System.out.println("Empty");
  261.                         }
  262.  
  263.                     }
  264.                     try {
  265.                         Files.write(Paths.get(logFile.getPath()),
  266.                                 ("Service execute complete at " + new Date() + ", Total file process = "
  267.                                         + fileList.length + ", Total time consume ="
  268.                                         + (System.currentTimeMillis() - start)).getBytes(),
  269.                                 StandardOpenOption.APPEND);
  270.                         Files.write(Paths.get(logFile.getPath()),
  271.                                 ("-------------------------------------------------------------------------------------------------------------------------------------------------------\n")
  272.                                         .getBytes(),
  273.                                 StandardOpenOption.APPEND);
  274.                     } catch (Exception e) {
  275.                         e.printStackTrace();
  276.                     }
  277.  
  278.                 }
  279.                 try {
  280.                     Thread.sleep(serviceConfig.getMonitorInterval());
  281.                     monitorFolder = new File(serviceConfig.getMonitoringFolder());
  282.                 } catch (Exception e) {
  283.                     e.printStackTrace();
  284.                 }
  285.             } catch (Exception e) {
  286.                 e.printStackTrace();
  287.             }
  288.         }
  289.  
  290.         return 0;
  291.     }
  292.  
  293.     private static void logServer(String str, String path, long totalTime, long fileSize) {
  294.         Date dNow = new Date();
  295.         SimpleDateFormat ft = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss ", Locale.ENGLISH);
  296.         SimpleDateFormat daily = new SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH);
  297.  
  298.         System.out.println("Current Date: " + ft.format(dNow));
  299.  
  300.         try (FileWriter fw = new FileWriter(new File(path, daily.format(dNow) + ".txt"), true);
  301.                 BufferedWriter bw = new BufferedWriter(fw);
  302.                 PrintWriter out = new PrintWriter(bw)) {
  303.             out.println("[" + ft.format(dNow) + "]" + " [API Resful service]" + str + ":" + "[" + "Timeuse:" + totalTime
  304.                     + "ms" + "]" + "[" + "Filesize:" + fileSize + "bytes" + "]");
  305.             // more code
  306.         } catch (IOException e) {
  307.  
  308.         }
  309.     }
  310.  
  311. }
Add Comment
Please, Sign In to add comment