Packages
diint_utilites_common_app
1.0.3
1.4.23
1.4.22
1.4.21
1.4.20
1.4.19
1.4.18
1.4.17
1.4.16
1.4.15
1.4.14
1.4.12
1.4.11
1.4.10
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.9
1.3.8
1.3.7
1.3.6
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.101
1.2.11
1.2.10
1.2.9
1.2.8
1.2.7
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
библиотеки для работы с ребитом и протоколы
Current section
Files
Jump to
Current section
Files
src/log/logger_Cheese.erl
%%%-------------------------------------------------------------------
%%% @author cheese
%%% @copyright (C) 2014, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 11. Jan 2014 1:38 PM
%%%-------------------------------------------------------------------
-module(logger_Cheese).
-author("cheese").
-behaviour(gen_server).
%% API
-export([start_link/0, info/2, info/3, register_file/1]).
%% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3, delete_file/3, move_file/1, check_file_size/1, zip/1, check_size/1, console/2, simple_message/2, console_plain/2]).
-define(SERVER, ?MODULE).
-define(TIMEOUT_CHECK_SIZE, 300000).
-define(LOG_FILE, "log/logger.log").
-record(state, {files :: [term()]}).
%%%===================================================================
%%% API
%%%===================================================================
simple_message(Format, Data) ->
console(Format, Data).
console(Format, Data) ->
{{Year, Month, Day}, {Hour, Min, Second}} = calendar:local_time(),
Date = lists:flatten(io_lib:format("~B-~2.10.0B-~2.10.0B ~2.10.0B:~2.10.0B:~2.10.0B ~w ", [Year, Month, Day, Hour, Min, Second, self()])),
Message = io_lib:fwrite(Format, Data),
MessageDate = io_lib:fwrite("~s ~s", [Date, Message]),
io:format("~s~n", [MessageDate]).
console_plain(Format, Data) ->
io:format(Format, Data).
info(Message, FileName) ->
gen_server:cast(?SERVER, {info, self(), Message, FileName}).
info(Format, Data, FileName) ->
gen_server:cast(?SERVER, {info, self(), Format, Data, FileName}).
register_file(FileName) ->
{{Year, Month, Day}, {Hour, Min, Second}} = calendar:local_time(),
Date = lists:flatten(io_lib:format("~B-~2.10.0B-~2.10.0B ~2.10.0B:~2.10.0B:~2.10.0B ~w ", [Year, Month, Day, Hour, Min, Second, self()])),
io:format("~s Start file: ~s~n", [io_lib:fwrite("~s", [Date]), FileName]),
gen_server:cast(?SERVER, {register, self(), FileName}).
%%--------------------------------------------------------------------
%%--------------------------------------------------------------------
start_link() ->
gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
%%%===================================================================
%%% gen_server callbacks
%%%===================================================================
%%--------------------------------------------------------------------
%%--------------------------------------------------------------------
init([]) ->
erlang:send_after(?TIMEOUT_CHECK_SIZE, self(), check_size),
logger_Cheese:register_file("log/pb_error_sender.log"),
logger_Cheese:register_file("log/promin_session.log"),
logger_Cheese:register_file(?LOG_FILE),
{ok, #state{files = []}}.
%%--------------------------------------------------------------------
%%--------------------------------------------------------------------
handle_call(_Request, _From, State) ->
{reply, ok, State}.
%%--------------------------------------------------------------------
%%--------------------------------------------------------------------
handle_cast({register, _Pid, FileName}, #state{files = Files} = State) ->
info("Register file: ~p~n", [FileName], ?LOG_FILE),
check_file_size(FileName),
NewFiles = [FileName | delete_file(FileName, Files, [])],
%%info("Files: ~p~n", [NewFiles], ?LOG_FILE),
{noreply, State#state{files = NewFiles}};
%%--------------------------------------------------------------------
handle_cast({info, Pid, Message, FileName}, State) ->
{{Year, Month, Day}, {Hour, Min, Second}} = calendar:local_time(),
Date = lists:flatten(io_lib:format("~B-~2.10.0B-~2.10.0B ~2.10.0B:~2.10.0B:~2.10.0B ~w ", [Year, Month, Day, Hour, Min, Second, Pid])),
MessageDate = io_lib:fwrite("~s ~s~n", [Date, Message]),
io:format("~s", [MessageDate]),
file:write_file(FileName, MessageDate, [append]),
{noreply, State};
%%--------------------------------------------------------------------
handle_cast({info, Pid, Format, Data, FileName}, State) ->
{{Year, Month, Day}, {Hour, Min, Second}} = calendar:local_time(),
Date = lists:flatten(io_lib:format("~B-~2.10.0B-~2.10.0B ~2.10.0B:~2.10.0B:~2.10.0B ~w ", [Year, Month, Day, Hour, Min, Second, Pid])),
Message = io_lib:fwrite(Format, Data),
MessageDate = io_lib:fwrite("~s ~s", [Date, Message]),
io:format("~s", [MessageDate]),
file:write_file(FileName, MessageDate, [append]),
{noreply, State};
%%--------------------------------------------------------------------
handle_cast(_Request, State) ->
{noreply, State}.
%%--------------------------------------------------------------------
%%--------------------------------------------------------------------
handle_info(check_size, #state{files = Files} = State) ->
info("check_size: ~p~n", [Files], ?LOG_FILE),
spawn(?MODULE, check_size, [Files]),
erlang:send_after(?TIMEOUT_CHECK_SIZE, self(), check_size),
{noreply, State};
%%--------------------------------------------------------------------
handle_info(status, #state{files = Files} = State) ->
info("Files: ~w ~n", [Files], ?LOG_FILE),
{noreply, State};
%%--------------------------------------------------------------------
handle_info(_Info, State) ->
{noreply, State}.
%%--------------------------------------------------------------------
%%--------------------------------------------------------------------
terminate(_Reason, _State) ->
ok.
%%--------------------------------------------------------------------
%%--------------------------------------------------------------------
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
%%%===================================================================
%%% Internal functions
%%%===================================================================
delete_file(_FileName, [], Res) ->
Res;
delete_file(FileName, [HeadFile | TailFiles], Res) ->
case lists_extension:are_equal(HeadFile, FileName) of
true ->
delete_file(FileName, TailFiles, Res);
_OtherFileName ->
delete_file(FileName, TailFiles, [HeadFile | Res])
end.
check_size([]) ->
ok;
check_size([File | Other]) ->
check_file_size(File),
check_size(Other).
check_file_size(FileName) ->
FileSize = filelib:file_size(FileName),
if
FileSize > 25000000 ->
move_file(FileName);
true ->
ok
end.
move_file(FileName) ->
FileNameAbs = filename:absname(FileName),
FileNameWithoutExt = filename:basename(FileName),
FileDir = filename:absname(filename:dirname(FileName)),
{{Year, Month, _}, _} = calendar:local_time(),
DateDir = lists:flatten(io_lib:format("~B~2.10.0B", [Year, Month])),
ArchDir = FileDir ++ "/arch",
file:make_dir(ArchDir),
NewFileDir = ArchDir ++ "/" ++ DateDir,
file:make_dir(NewFileDir),
NewFileName = NewFileDir ++ "/" ++ FileNameWithoutExt ++ ".arch",
Res = file:rename(FileNameAbs, NewFileName),
info("rename: ~p [~p] to [~p] ~n", [Res, FileNameAbs, NewFileName], ?LOG_FILE),
spawn(?SERVER, zip, [NewFileName]).
zip(FileName) ->
{{Year, Month, Day}, {Hour, Min, Second}} = calendar:local_time(),
Date = lists:flatten(io_lib:format("~B~2.10.0B~2.10.0B~2.10.0B~2.10.0B~2.10.0B", [Year, Month, Day, Hour, Min, Second])),
FileDir = filename:absname(filename:dirname(FileName)),
FileNameWithoutExt = filename:basename(FileName),
ZipCommand = "zip -mj " ++ FileDir ++ "/" ++ Date ++ "_" ++ FileNameWithoutExt ++ ".zip " ++ FileName,
info("ZipCommand: ~p~n", [ZipCommand], ?LOG_FILE),
os:cmd(ZipCommand).