Advertisement
Guest User

Untitled

a guest
May 29th, 2017
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 6.12 KB | None | 0 0
  1. unit service_process;
  2.  
  3. interface
  4.  
  5. uses SysUtils;
  6.  
  7. type
  8.   TQueryResult = record
  9.     success : Boolean;
  10.     message : String;
  11.   end;
  12.  
  13. procedure DoRoutine;
  14.  
  15. var
  16.   error: boolean;
  17.  
  18. const
  19.   SERVICE_NAME = 'MK_Kulgram';
  20.  
  21.  
  22. implementation
  23.  
  24. uses ZAbstractConnection, ZConnection, Classes, DB, StrUtils, ZDataset,
  25.      idHTTPServer, WinSock, uMyConfigFile, IdContext, idCustomHTTPServer,
  26.      uHelper;
  27.  
  28. var
  29.   con1 : TZConnection;
  30.   qry1 : TZQuery;
  31.   flog : TStrings;
  32.   AppF : String;
  33.   conf : TINIFile;
  34.   http : TidHTTPServer;
  35.  
  36. const
  37.   Ver = '2.0.4';
  38.  
  39. procedure Println(AText: string);
  40. begin
  41.   if (ParamStr(1) = '/I') or (ParamStr(1) = '/U') then
  42.   Writeln(AText);
  43. end;
  44.  
  45. function ThisTime: string;
  46. var
  47.   thn, bln, tgl, jam, men, det, mil: Word;
  48. begin
  49.   DecodeTime(Now, jam, men, det, mil);
  50.   DecodeDate(Now, thn, bln, tgl);
  51.  
  52.   result := format('%.4d-%.2d-%.2d %.2d:%.2d:%.2d', [thn, bln, tgl,
  53.                    jam, men, det]);
  54. end;
  55.  
  56. function  FileName: string;
  57. var
  58.   thn, bln, tgl: Word;
  59. begin
  60.   DecodeDate(Now, thn, bln, tgl);
  61.   result := format('%.4d-%.2d-%.2d.txt', [thn, bln, tgl]);
  62. end;
  63.  
  64. procedure SaveLog;
  65. begin
  66.   flog.SaveToFile(AppF + 'log/' + FileName);
  67. end;
  68.  
  69. procedure WriteLog(teks: String);
  70. begin
  71.   flog.Add(format('[%s] - %s', [ThisTime, teks]));
  72.   SaveLog;
  73. end;
  74.  
  75. function  isSelect(SQL: String): boolean;
  76. begin
  77.   SQL := trim(LowerCase(SQL));
  78.  
  79.   result := Copy(SQL, 1, 6) = 'select';
  80. end;
  81.  
  82. function  RemoveDoubleQuote(Text: string): string;
  83. begin
  84.   result := StringReplace(Text, '"', '', [rfReplaceAll]);
  85. end;
  86.  
  87. function ParseSQL(ASQL: String): String;
  88. begin
  89.   ASQL := StringReplace(ASQL, '"NULL"', 'NULL', [rfReplaceAll, rfIgnoreCase]);
  90.  
  91.   result := ASQL;
  92. end;
  93.  
  94. function  ExecQuery(qry: TZQuery): TQueryResult;
  95. var
  96.   str: string;
  97. begin
  98.   str := ParseSQL(qry.SQL.Text);
  99.  
  100.   qry.SQL.Text := str;
  101.  
  102.   try
  103.     if isSelect(qry.SQL.Text) then
  104.     qry.Open else
  105.     qry.ExecSQL;
  106.  
  107.     result.success := true;
  108.     result.message := '';
  109.   except
  110.     on E:Exception do
  111.     begin
  112.       WriteLog(E.Message + #13#10#13#10#13#10 + qry.SQL.Text);
  113.       result.success := false;
  114.       result.message := E.Message;
  115.     end;
  116.     on E:EDatabaseError do
  117.     begin
  118.       WriteLog(E.Message + #13#10#13#10#13#10 + qry.SQL.Text);
  119.       result.success := false;
  120.       result.message := E.Message;
  121.     end;
  122.   end;
  123. end;
  124.  
  125. function  MySQLDate(ADate: TDate): String;
  126. begin
  127.   result := FormatDateTime('YYYY-mm-dd', ADate);
  128.   result := ifthen(result = '1899-12-30', 'NULL', result);
  129. end;
  130.  
  131. procedure ReConnectDatabase;
  132. begin
  133.   con1.Disconnect;
  134.  
  135.   try
  136.     con1.Connect;
  137.   except
  138.     on E:Exception do
  139.     begin
  140.       WriteLog('Database GL gagal terkoneksi');
  141.       WriteLog(E.Message);
  142.       WriteLog(format('host:%s;port:%d;user:%s;pass:%s;dbname:%s',
  143.                [con1.HostName, con1.Port, con1.User, con1.Password,
  144.                 con1.Database]));
  145.       Error := true;
  146.     end;
  147.     on E:EDatabaseError do
  148.     begin
  149.       WriteLog('Database GL gagal terkoneksi');
  150.       WriteLog(E.Message);
  151.       WriteLog(format('host:%s;port:%d;user:%s;pass:%s;dbname:%s',
  152.                [con1.HostName, con1.Port, con1.User, con1.Password,
  153.                 con1.Database]));
  154.       Error := true;
  155.     end;
  156.   end;
  157. end;
  158.  
  159.  
  160. procedure CekDatabaseConnection;
  161. begin
  162.   con1.HostName        := conf.ReadString ('database', 'host', 'localhost');
  163.   con1.Port            := conf.ReadInteger('database', 'port', 3306);
  164.   con1.User            := conf.ReadString ('database', 'user', 'root');
  165.   con1.Password        := conf.ReadString ('database', 'password', '');
  166.   con1.Database        := conf.ReadString ('database', 'database', 'webserver');
  167.   con1.Protocol        := 'mysql';
  168.   con1.LibraryLocation := AppF + 'libmysql.dll';
  169.  
  170.   PrintLn(SERVICE_NAME + ' : Connecting to Database.....');
  171.   try
  172.     con1.Connect;
  173.     WriteLog('Berhasil konek ke database');
  174.     PrintLn(SERVICE_NAME + ' : Database is Connected.....');
  175.   except
  176.     on E:Exception do
  177.     begin
  178.       PrintLn(SERVICE_NAME + ' : Database is failure Connection.....');
  179.       WriteLog('Gagal konek ke database');
  180.       WriteLog(E.Message);
  181.       WriteLog(format('host:%s;port:%d;user:%s;pass:%s;dbname:%s',
  182.                [con1.HostName , con1.Port, con1.User, '[hidden]',
  183.                con1.Database]));
  184.       Error := true;
  185.     end;
  186.     on E:EDatabaseError do
  187.     begin
  188.       PrintLn(SERVICE_NAME + ' : Database is failure Connection.....');
  189.       WriteLog('Gagal konek ke database');
  190.       WriteLog(E.Message);
  191.       WriteLog(format('host:%s;port:%d;user:%s;pass:%s;dbname:%s',
  192.                [con1.HostName , con1.Port, con1.User, '[hidden]',
  193.                con1.Database]));
  194.       Error := true;
  195.     end;
  196.   end;
  197. end;
  198.  
  199. procedure LoadLog;
  200. begin
  201.   if FileExists(AppF + 'log/' + FileName) then
  202.   flog.LoadFromFile(AppF + 'log/' + FileName);
  203. end;
  204.  
  205. procedure DoRoutine;
  206. var
  207.   Jam, Min, Det, per : Word;
  208. begin
  209.   DecodeTime(time, Jam, Min, Det, per);
  210.  
  211.   if (jam = 0) and (min = 0) and (det = 0) then
  212.   flog.Clear;
  213.  
  214.   //reconect tiap 2 jam;
  215.   if (jam mod 2 = 0) and (min = 0) and (det = 0) then
  216.   ReconnectDatabase;
  217. end;
  218.  
  219. initialization
  220.   AppF := ExtractFilePath(paramstr(0));
  221.   con1 := TZConnection.Create(nil);
  222.   qry1 := TZQuery.Create(nil);
  223.   conf := TINIFile.Create(AppF + 'kulgram.kppdi');
  224.   http := TidHTTPServer.Create(nil);
  225.   fLog := TStringList.Create;
  226.   LoadLog;
  227.  
  228.   http.DefaultPort := conf.ReadInteger('webserver', 'port', 8080);
  229.   try
  230.     http.Active := true;
  231.     WriteLog(format('Webserver telah aktif pada Port %d',
  232.              [http.DefaultPort]));
  233.   except
  234.     on E:Exception do
  235.     begin
  236.       WriteLog('Webserver tidak dapat diaktifkan. ' + E.Message);
  237.     end;
  238.   end;
  239.  
  240.   http.OnCommandGet := Helper.CommandGet;
  241.   qry1.Connection   := con1;
  242.  
  243.   if not DirectoryExists(AppF + 'log') then
  244.   ForceDirectories(AppF + 'log');
  245.  
  246.   WriteLog('Service Started (v' + Ver + ')..');
  247.  
  248.   if ParamStr(1) <> '/U' then
  249.   CekDatabaseConnection;
  250.  
  251. finalization
  252.   WriteLog('Service Stopped (v' + Ver + ')..');
  253.   http.Bindings.Clear;
  254.   SaveLog;
  255.  
  256.   fLog.Free;
  257.   con1.Free;
  258.   qry1.Free;
  259.   conf.Free;
  260.  
  261. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement