diff --git a/CXM_message_constants.anubis b/CXM_message_constants.anubis index 9e279d5..64f6604 100644 --- a/CXM_message_constants.anubis +++ b/CXM_message_constants.anubis @@ -64,6 +64,8 @@ public define Word32 _CXM_FTP_DATA = 0x33771404. public define Word32 _CXM_LOGGER_SERVICE_MSG_BASIS = 0x33771800. // public define Word32 _CXM_LOGGER_SERVICE_ID = 0x33771801. public define Word32 _CXM_LOGGER_LOG = 0x33771802. +public define Word32 _CXM_LOGGER_REGISTER_UID = 0x33771803. +public define Word32 _CXM_LOGGER_REGISTER_LOG = 0x33771804. // ************** DOMAIN SERVICE ************** diff --git a/database/alter_table.anubis b/database/alter_table.anubis index afb51ed..0e0d08e 100644 --- a/database/alter_table.anubis +++ b/database/alter_table.anubis @@ -56,39 +56,39 @@ define One ) = if l is { - [] then print(" <<<\n"), + [] then print(" <<<\n"), [h . t] then print(h + ", "); print_list(t) }. define Maybe(One) my_sql_query ( - Database db, - String sql, - Logger log + Database db, + String sql, + (LogLevel, String) -> One log ) = if sql_query(db, sql) is { - error(sql_error) then logError(log, "SQL ERROR: " + sql_error.text + "\n ...executing query [" + sql + "]"); failure, - ok(_,_,_) then success(unique) + error(sql_error) then log(logError, "SQL ERROR: " + sql_error.text + "\n ...executing query [" + sql + "]"); failure, + ok(_,_,_) then success(unique) }. define Maybe(String) get_original_query ( - Database db, - String dbName, // alias for attached database, 'main' for main database. - DbEntityType object_type, - String tableName, - Logger log + Database db, + String dbName, // alias for attached database, 'main' for main database. + DbEntityType object_type, + String tableName, + (LogLevel, String) -> One log ) = if sql_query(db, "SELECT sql FROM " + dbName + ".sqlite_master where (type='"+to_String(object_type)+"') and tbl_name='" + tableName + "'") is { - error(sql_error) then logError(log, "alter_table/get_original_query ERROR '" + sql_error.text + "'"); failure, - ok(_,table_cursor,_) then + error(sql_error) then log(logError, "alter_table/get_original_query ERROR '" + sql_error.text + "'"); failure, + ok(_,table_cursor,_) then if table_cursor(unique) is { - error(sql_error) then logError(log, "alter_table/get_original_query ERROR '" + sql_error.text + "'"); failure, + error(sql_error) then log(logError, "alter_table/get_original_query ERROR '" + sql_error.text + "'"); failure, no_more_row then failure, //can't find the table in sqlite_master, because the table is new row(current) then success(text(current)(0)) } @@ -97,17 +97,17 @@ define Maybe(String) define Bool has_rows ( - Database db, - String tableName, - Logger log + Database db, + String tableName, + (LogLevel, String) -> One log ) = if sql_query(db, "SELECT count(*) FROM " + tableName) is { - error(sql_error) then logError(log, "has_rows query ERROR '" + sql_error.text + "'"); false, - ok(_,table_cursor,_) then + error(sql_error) then log(logError, "has_rows query ERROR '" + sql_error.text + "'"); false, + ok(_,table_cursor,_) then if table_cursor(unique) is { - error(sql_error) then logError(log, "has_row run ERROR '" + sql_error.text + "'"); false, + error(sql_error) then log(logError, "has_row run ERROR '" + sql_error.text + "'"); false, no_more_row then false, row(current) then db_integer(current)(0) /= 0 } @@ -126,34 +126,34 @@ define List(String) alter_table_extract_columns_list ( SQLite3HeadersOrRow -> SQLite3Row table_cursor, - Logger log + (LogLevel, String) -> One log ) = if table_cursor(headers) is { - error(sql_error) then logError(log, "alter_table_extract_columns_list ERROR '" + sql_error.text + "'"); [], + error(sql_error) then log(logError, "alter_table_extract_columns_list ERROR '" + sql_error.text + "'"); [], no_more_row then [], - row(headers) then alter_table_extract_columns_list_sub(headers, 0) + row(headers) then alter_table_extract_columns_list_sub(headers, 0) }. define String alter_table_extract_column_string ( - One -> DbRow table_cursor, - List(String) oldColumns, - Logger log + One -> DbRow table_cursor, + List(String) oldColumns, + (LogLevel, String) -> One log ) = if table_cursor(unique) is { - error(sql_error) then logError(log, "alter_table_extract_columns_list ERROR '" + sql_error.text + "'"); "", + error(sql_error) then log(logError, "alter_table_extract_columns_list ERROR '" + sql_error.text + "'"); "", no_more_row then /*logDebug(log, "Extract columns answers 'no more row'");*/ "", - row(row) then + row(row) then if row(1) is db_text(name) then - with test = (String name2) |-> logDebug(log, "name: " + name + " / name2: " + name2); if name = name2 then true else false, + with test = (String name2) |-> log(logDebug, "name: " + name + " / name2: " + name2); if name = name2 then true else false, colString = alter_table_extract_column_string(table_cursor, oldColumns, log), if find_element(oldColumns, test) is { - failure then colString, - success(_) then logDebug(log, "found: " + name); + failure then colString, + success(_) then log(logDebug, "found: " + name); if is_empty(colString) then name else name + ", " + colString } else "" @@ -191,25 +191,25 @@ define Bool public define Maybe(One) alter_table ( - Database db, - String dbName, // alias for attached database, 'main' for main database. - String tableName, - String newTableQuery, - Logger log + Database db, + String dbName, // alias for attached database, 'main' for main database. + String tableName, + String newTableQuery, + (LogLevel, String) -> One log ) = with fullTableName = dbName + "." + tableName, if get_original_query(db, dbName, table, tableName, log) is { failure then - logInfo(log, "Creating table '" + fullTableName + "'... "); + log(logInfo, "Creating table '" + fullTableName + "'... "); if sql_query(db, newTableQuery) is error(sql_error) - then logError(log, "ERROR : " + sql_error.text); failure - else logInfo(log, " --> ok."); success(unique), + then log(logError, "ERROR : " + sql_error.text); failure + else log(logInfo, " --> ok."); success(unique), success(originalTableQuery) then if compare_creation_queries(tableName, originalTableQuery, newTableQuery) = false then - logInfo(log, "Updating table '" + fullTableName + "' on database... "); - println(originalTableQuery); - println(newTableQuery); + log(logInfo, "Updating table '" + fullTableName + "' on database... "); + log(logDebug, originalTableQuery); + log(logDebug, newTableQuery); if has_rows(db, fullTableName, log) is { false then @@ -217,8 +217,8 @@ public define Maybe(One) then failure else if my_sql_query(db, newTableQuery, log ) is { - failure then failure, - success(_) then logInfo(log, " --> ok."); success(unique) + failure then failure, + success(_) then log(logInfo, " --> ok."); success(unique) }, true then with tempNameTable = tableName + "_temp", @@ -229,20 +229,20 @@ public define Maybe(One) if my_sql_query(db, newTableQuery , log) is failure then failure else if sql_query(db, "SELECT * FROM " + tempNameTable) is { - error(sql_error) then logError(log, "alter_table: select * tempTable ERROR '" + sql_error.text + "'"); failure, - ok(get_cols,table_cursor2,_) then + error(sql_error) then log(logError, "alter_table: select * tempTable ERROR '" + sql_error.text + "'"); failure, + ok(get_cols,table_cursor2,_) then with oldColumns = get_cols(unique), //print_list(oldColumns); if sql_query(db, "PRAGMA " + dbName + ".table_info(" + tableName + ")") is { - error(sql_error) then logError(log, "alter_table: pragma table_info() ERROR '" + sql_error.text + "'"); failure, + error(sql_error) then log(logError, "alter_table: pragma table_info() ERROR '" + sql_error.text + "'"); failure, ok(_,table_cursor3,_) then with newColumnsStr = alter_table_extract_column_string(table_cursor3, oldColumns, log), sql = "INSERT INTO " + fullTableName + " (" + newColumnsStr + ") SELECT " + newColumnsStr + " FROM " + tempNameTable, if sql_query(db, sql) is { - error(sql_error) then logError(log, "alter_table ERROR '" + sql_error.text + "'\n\tquery = [" + sql + "]"); failure, - ok(_,_,_) then logInfo(log, " --> ok."); success(unique) + error(sql_error) then log(logError, "alter_table ERROR '" + sql_error.text + "'\n\tquery = [" + sql + "]"); failure, + ok(_,_,_) then log(logInfo, " --> ok."); success(unique) } } }, @@ -257,10 +257,10 @@ public define Maybe(One) public define Maybe(One) alter_table ( - Database db, - String tableName, - String newTableQuery, - Logger log + Database db, + String tableName, + String newTableQuery, + (LogLevel, String) -> One log ) = alter_table(db, "main", tableName, newTableQuery, log). @@ -268,31 +268,31 @@ public define Maybe(One) public define Maybe(One) alter_view ( - Database db, - String dbName, // alias for attached database, 'main' for main database. - String viewName, - String newViewQuery, - Logger log + Database db, + String dbName, // alias for attached database, 'main' for main database. + String viewName, + String newViewQuery, + (LogLevel, String) -> One log ) = with fullViewName = dbName + "." + viewName, if get_original_query(db, dbName, view, viewName, log) is { failure then - logInfo(log, "Creating view '" + fullViewName + "'... "); + log(logInfo, "Creating view '" + fullViewName + "'... "); if sql_query(db, newViewQuery) is error(sql_error) - then logError(log, "ERROR : " + sql_error.text); failure - else logInfo(log, " --> ok."); success(unique), + then log(logError, "ERROR : " + sql_error.text); failure + else log(logInfo, " --> ok."); success(unique), success(originalViewQuery) then if compare_creation_queries(viewName, originalViewQuery, newViewQuery) = false then - logInfo(log, "Updating view '" + fullViewName + "' on database... "); - println(originalViewQuery); - println(newViewQuery); + log(logInfo, "Updating view '" + fullViewName + "' on database... "); + log(logDebug, originalViewQuery); + log(logDebug, newViewQuery); if my_sql_query(db, "DROP VIEW " + fullViewName, log) is failure then failure else if my_sql_query(db, newViewQuery, log ) is { - failure then failure, - success(_) then logInfo(log, " --> ok."); success(unique) + failure then failure, + success(_) then log(logInfo, " --> ok."); success(unique) } else success(unique) @@ -301,10 +301,10 @@ public define Maybe(One) public define Maybe(One) alter_view ( - Database db, - String viewName, - String newViewQuery, - Logger log + Database db, + String viewName, + String newViewQuery, + (LogLevel, String) -> One log ) = alter_view(db, "main", viewName, newViewQuery, log). diff --git a/database/db_types.anubis b/database/db_types.anubis index 333efda..31e5361 100644 --- a/database/db_types.anubis +++ b/database/db_types.anubis @@ -216,6 +216,15 @@ public define String . public define String + get_time + ( + DB_datetime dt + )= + with ba_dt = to_byte_array(dt.datetime), + to_string(extract(ba_dt, 11, 19)) +. + +public define String to_String ( DB_time t diff --git a/database/db_utils.anubis b/database/db_utils.anubis index 260da91..8339cb5 100644 --- a/database/db_utils.anubis +++ b/database/db_utils.anubis @@ -18,7 +18,7 @@ transmit calexium_lib/database/db_utils.anubis transmit calexium_lib/database/db_binds.anubis transmit calexium_lib/database/db_update_fields.anubis -read calexium_lib/net_services_protocols/logger_service.anubis +read calexium_lib/net_services_protocols/logger_client.anubis public define Int one_year_seconds = 365 * 86400. // amount of seconds during 1 year // public define Int one_month_seconds = 31 * 86400. @@ -41,7 +41,7 @@ define One ) = with t = unow - t0, if t.seconds > 0 then - logTrace("SQL", logMask("sql_profiling"), "[SQL LONG QUERY] " + __utime_to_string(t) + " from ("+msg+") executing [" + sql_query + "]") + logTrace("", "SQL", logMask("sql_profiling"), "[SQL LONG QUERY] " + __utime_to_string(t) + " from ("+msg+") executing [" + sql_query + "]") else unique. @@ -52,7 +52,7 @@ define One String sql_query, String msg ) = - logTrace("SQL_TRACE", logMask("sql_trace"), "[SQL] " + __utime_to_string(unow - t0) + " from ("+msg+") executing [" + sql_query + "]"). + logTrace("", "SQL_TRACE", logMask("sql_trace"), "[SQL] " + __utime_to_string(unow - t0) + " from ("+msg+") executing [" + sql_query + "]"). public define Result(DbError, One) sql_transaction @@ -68,10 +68,10 @@ public define Result(DbError, One) (One _) |-> if db_query(db, sql_command) is { - error(err) then logError("DB", db_error(err,message));failure //error in the SQL request + error(err) then logError("", "DB", db_error(err,message));failure //error in the SQL request ok(_,cursor,_) then success(unique) }, - success( (DbError err) |-> logError("DB", db_error(err,message))), + success( (DbError err) |-> logError("", "DB", db_error(err,message))), 600000, // max 600s 200, // retry every 100 ms (DbError _) |-> false @@ -101,7 +101,7 @@ public define DbQueryResult with t0 = unow, if sql_query_timeout(db, sql_query, initial_bindings, 60, 100, (DbError _) |-> false) is { - error(sql_error) then logError("DB", db_error(sql_error,msg) + " executing [" + sql_query + "]"); + error(sql_error) then logError("", "DB", db_error(sql_error,msg) + " executing [" + sql_query + "]"); __logLongQueries(t0, sql_query, msg); error(sql_error), ok(headers, cursor, reset) then @@ -146,7 +146,7 @@ public define SQLite3QueryResult if sql_query_timeout(db, sql_query, initial_bindings, 120, 100) is { error(sql_error) then - logError("DB", db_error(sql_error,msg) /*+ " executing [" + sql_query + "]"*/); + logError("", "DB", db_error(sql_error,msg) /*+ " executing [" + sql_query + "]"*/); //println(" executing [" + sql_query + "]"); __logQueries(t0, "[sql_query_timeout Error] "+sql_query, msg); __logLongQueries(t0, sql_query, msg); @@ -179,7 +179,7 @@ public define SQLite3Row if sql_query_statement_timeout(sql_command_stmt, initial_bindings, 120, 100, msg) is { error(sql_error) then - logError("DB", db_error(sql_error,msg) /*+ " executing [" + sql_query + "]"*/); + logError("", "DB", db_error(sql_error,msg) /*+ " executing [" + sql_query + "]"*/); //println(" executing [" + sql_command_stmt + "]"); __logQueries(t0, "[sql_query_statement_timeout Error]", msg); __logLongQueries(t0, "stmt", msg); @@ -204,7 +204,7 @@ public define String ) = if table_cursor(unique) is { - error(sql_error) then logError("DB", db_error(sql_error, "db_get_String")); "", + error(sql_error) then logError("", "DB", db_error(sql_error, "db_get_String")); "", no_more_row then "", //can't find the symbol in the table, because the row is empty row(explorer) then text(explorer)(0) }. @@ -217,7 +217,7 @@ public define List(String) ) = if table_cursor(unique) is { - error(sql_error) then logError("DB", db_error(sql_error, "db_get_string_list")); reverse(so_far), + error(sql_error) then logError("", "DB", db_error(sql_error, "db_get_string_list")); reverse(so_far), no_more_row then reverse(so_far), //can't find the symbol in the table, because the row is empty row(explorer) then with s = text(explorer)(0), @@ -233,7 +233,7 @@ public define List(String) ) = if table_cursor(unique) is { - error(sql_error) then logError("DB", db_error(sql_error, "db_get_string_list")); reverse(so_far), + error(sql_error) then logError("", "DB", db_error(sql_error, "db_get_string_list")); reverse(so_far), no_more_row then reverse(so_far), //can't find the symbol in the table, because the row is empty row(explorer) then with s = text(explorer)(0), @@ -248,7 +248,7 @@ public define List(String) ) = if table_cursor(unique) is { - error(sql_error) then logError("DB", db_error(sql_error, "db_get_string_list")); [], + error(sql_error) then logError("", "DB", db_error(sql_error, "db_get_string_list")); [], no_more_row then [], //can't find the symbol in the table, because the row is empty row(explorer) then with s = text(explorer)(0), @@ -263,7 +263,7 @@ public define Int ) = if table_cursor(unique) is { - error(sql_error) then logError("DB", db_error(sql_error, "db_get_integer")); 0, + error(sql_error) then logError("", "DB", db_error(sql_error, "db_get_integer")); 0, no_more_row then 0, row(explorer) then (Int)db_integer(explorer)(0) }. @@ -275,7 +275,7 @@ public define Maybe(Int) ) = if table_cursor(unique) is { - error(sql_error) then logError("DB", db_error(sql_error, "db_get_mb_integer")); failure, + error(sql_error) then logError("", "DB", db_error(sql_error, "db_get_mb_integer")); failure, no_more_row then failure, row(explorer) then db_integer(explorer)(0) }. @@ -289,7 +289,7 @@ public define List(Int) ) = if table_cursor(unique) is { - error(sql_error) then logError("DB", db_error(sql_error, "db_get_integer_list")); reverse(so_far), + error(sql_error) then logError("", "DB", db_error(sql_error, "db_get_integer_list")); reverse(so_far), no_more_row then reverse(so_far), //can't find the symbol in the table, because the row is empty row(explorer) then with s = (Int)db_integer(explorer)(0), @@ -311,7 +311,7 @@ public define Float ) = if table_cursor(unique) is { - error(sql_error) then logError("DB", db_error(sql_error, "db_get_Float")); 0.0, + error(sql_error) then logError("", "DB", db_error(sql_error, "db_get_Float")); 0.0, no_more_row then 0.0, row(explorer) then db_float(explorer)(0) }. @@ -324,7 +324,7 @@ public define List(Int) ) = if table_cursor(unique) is { - error(sql_error) then logError("DB", db_error(sql_error, "db_get_integer_list")); reverse(so_far), + error(sql_error) then logError("", "DB", db_error(sql_error, "db_get_integer_list")); reverse(so_far), no_more_row then reverse(so_far), //can't find the symbol in the table, because the row is empty row(explorer) then with s = (Int)db_integer(explorer)(0), diff --git a/database/migration_common_sqlite3.anubis b/database/migration_common_sqlite3.anubis index e339d49..6ea956a 100644 --- a/database/migration_common_sqlite3.anubis +++ b/database/migration_common_sqlite3.anubis @@ -14,7 +14,7 @@ read data_base/db_types.anubis //FK... read data_base/sqlite_foreign_key.anubis read calexium_lib/database/db_utils.anubis -read calexium_lib/net_services_protocols/logger_service.anubis +//read calexium_lib/net_services_protocols/logger_service.anubis transmit db_version.anubis public type DbTable: @@ -78,16 +78,16 @@ public define Bool public define Maybe(One) drop_all_triggers ( - SQLite3DataBase db, - Logger log + SQLite3DataBase db, + (LogLevel, String) -> One log ) = if sqlite3_query(db, "SELECT name FROM sqlite_master WHERE type = 'trigger'", []) is { - error(err) then logError(log, db_error(err, "drop_all_triggers")); failure, - ok(_, cursor, _) then + error(err) then log(logError, db_error(err, "drop_all_triggers")); failure, + ok(_, cursor, _) then with drop_trigger = (String name) |-> if sqlite3_query(db, "DROP TRIGGER " + name, []) is { - error(err2) then logError(log, db_error(err2, "Failed to drop trigger '" + name + "'")), + error(err2) then log(logError, db_error(err2, "Failed to drop trigger '" + name + "'")), ok(_, cursor, _) then unique }, map_forget(drop_trigger, db_get_string_list(cursor, [])); @@ -97,10 +97,10 @@ public define Maybe(One) public define Maybe(One) create_tables ( - SQLite3DataBase db, - Logger logger, - List(DbTable) tables, - String version_string + SQLite3DataBase db, + (LogLevel, String) -> One logger, + List(DbTable) tables, + String version_string ) = if tables is { @@ -111,19 +111,19 @@ public define Maybe(One) table(table_name, create_string) then if alter_table(db, table_name, create_string, logger) is { - failure then logError(logger, "Version "+version_string+": Can't create '"+table_name+"' table"); failure, + failure then logger(logError, "Version "+version_string+": Can't create '"+table_name+"' table"); failure, success(_) then create_tables(db, logger, t, version_string) }, table(db_name, table_name, create_string) then if alter_table(db, db_name, table_name, create_string, logger) is { - failure then logError(logger, "Version "+version_string+": Can't create '"+db_name+"."+table_name+"' table"); failure, + failure then logger(logError, "Version "+version_string+": Can't create '"+db_name+"."+table_name+"' table"); failure, success(_) then create_tables(db, logger, t, version_string) }, view(view_name, create_string) then if alter_view(db, view_name, create_string, logger) is { - failure then logError(logger, "Version "+version_string+": Can't create '"+view_name+"' view"); failure, + failure then logger(logError, "Version "+version_string+": Can't create '"+view_name+"' view"); failure, success(_) then create_tables(db, logger, t, version_string) }, } @@ -133,10 +133,10 @@ public define Maybe(One) public define Maybe(One) create_indexes ( - SQLite3DataBase db, - Logger logger, - List(String) indexes, - String version_string + SQLite3DataBase db, + (LogLevel, String) -> One logger, + List(String) indexes, + String version_string )= if indexes is { @@ -153,19 +153,19 @@ public define Maybe(One) public define One make_foreign_key ( - SQLite3DataBase db, - String table_name, - String field_name, - String foreign_table_name, - String foreign_field_name, - Bool fk_null, - Bool fk_cascade, - Logger log + SQLite3DataBase db, + String table_name, + String field_name, + String foreign_table_name, + String foreign_field_name, + Bool fk_null, + Bool fk_cascade, + (LogLevel, String) -> One log ) = if (Maybe(One))make_foreign_key(db, table_name, field_name, foreign_table_name, foreign_field_name, fk_null, fk_cascade, log) is { failure then - logError(log, "Can't create foreign key constraint between '"+table_name+"' and '"+foreign_table_name+"' tables"), + log(logError, "Can't create foreign key constraint between '"+table_name+"' and '"+foreign_table_name+"' tables"), success(_) then unique }. @@ -173,20 +173,20 @@ public define One public define Maybe(One) make_foreign_keys ( - SQLite3DataBase db, - Logger logger, + SQLite3DataBase db, + (LogLevel, String) -> One logger, List((String, String, String, String, FK_Null, FK_Cascade)) relations, - String version_string + String version_string )= if relations is { - [] then success(unique), + [] then success(unique), [h . t] then if h is (table_name, field_name, foreign_table_name, foreign_field_name, fk_null, fk_cascade) then if (Maybe(One))make_foreign_key(db, table_name, field_name, foreign_table_name, foreign_field_name, fk_null, fk_cascade, logger) is { failure then - logError(logger, "Version "+version_string+": Can't create foreign key constraint between '"+table_name+"' and '"+foreign_table_name+"' tables"); failure, + logger(logError, "Version "+version_string+": Can't create foreign key constraint between '"+table_name+"' and '"+foreign_table_name+"' tables"); failure, success(_) then make_foreign_keys(db, logger, t, version_string) } diff --git a/database/migration_sqlite3.anubis b/database/migration_sqlite3.anubis index 4b2d142..bb16049 100644 --- a/database/migration_sqlite3.anubis +++ b/database/migration_sqlite3.anubis @@ -13,16 +13,16 @@ read system/string.anubis read data_base/sqlite.anubis read calexium_lib/database/alter_table.anubis read calexium_lib/database/db_utils.anubis -read calexium_lib/net_services_protocols/logger_service.anubis +//read calexium_lib/net_services_protocols/logger_client.anubis read calexium_lib/types/version.anubis read migration_common_sqlite3.anubis public type Migration: migration(DB_Version version, - (SQLite3DataBase, Logger) -> Maybe(One) migrate_to, - (SQLite3DataBase, Logger) -> Maybe(One) create_tables, - (SQLite3DataBase, Logger) -> Maybe(One) create_indexes, + (SQLite3DataBase, (LogLevel, String) -> One) -> Maybe(One) migrate_to, + (SQLite3DataBase, (LogLevel, String) -> One) -> Maybe(One) create_tables, + (SQLite3DataBase, (LogLevel, String) -> One) -> Maybe(One) create_indexes, ). @@ -41,7 +41,7 @@ public define Bool public define Maybe(One) backup_database ( - Logger logger, + (LogLevel, String) -> One logger, // String current_version, String db_path, String main_db_name, @@ -62,18 +62,18 @@ public define Maybe(One) with dir_save = db_path + dir_save_database, if (Maybe(String))make_directory(dir_save) is { - failure then logError(logger, "Can't create directory '"+db_path + dir_save_database+"'"); failure, + failure then logger(logError, "Can't create directory '"+db_path + dir_save_database+"'"); failure, success(_) then with copy_with_log = (String src, String dst) |-> if file_exists(src) then if copy_file(src, dst) is { - cant_read_file then logError(logger, "Can't read source file '" + src + "'."); failure, - cant_create_file then logError(logger, "Can't create destination file '" + dst + "'."); failure, - copy_error then logError(logger, "Can't copy file '" + src + "' to file '" + dst + "'."); failure, - copy_file_mode_error then logError(logger, "Can't get file mode for source file '" + src + "'."); failure, - copy_file_times_error then logError(logger, "Can't set file times into file '" + dst + "'."); failure, - copy_ok(_) then logInfo(logger, "File '" + dst + "' saved"); success(unique) + cant_read_file then logger(logError, "Can't read source file '" + src + "'."); failure, + cant_create_file then logger(logError, "Can't create destination file '" + dst + "'."); failure, + copy_error then logger(logError, "Can't copy file '" + src + "' to file '" + dst + "'."); failure, + copy_file_mode_error then logger(logError, "Can't get file mode for source file '" + src + "'."); failure, + copy_file_times_error then logger(logError, "Can't set file times into file '" + dst + "'."); failure, + copy_ok(_) then logger(logInfo, "File '" + dst + "' saved"); success(unique) } else success(unique), with copy_db = (List(String) names) |-copy_db-> @@ -95,7 +95,7 @@ public define Maybe(One) public define Maybe(One) backup_database ( - Logger logger, + (LogLevel, String) -> One logger, SQLite3DataBase db, String db_path, String main_db_name @@ -105,7 +105,7 @@ public define Maybe(One) with v3_27 = version(3,27,0,0), with sqlite_version = if sql_query_timeout(db, "SELECT sqlite_version();", "backup_database get version") is { - error(_) then logError(logger, "Can't get sqlite version for backup");failure, + error(_) then logger(logError, "Can't get sqlite version for backup");failure, ok(_, cursor, _) then with sqlite_version_str = db_get_String(cursor), to_Version(sqlite_version_str) @@ -113,24 +113,24 @@ public define Maybe(One) if sqlite_version is { - failure then logError(logger, "Can't get sqlite version for backup ");failure, + failure then logger(logError, "Can't get sqlite version for backup ");failure, success(sqlite_v) then //if the SQLite engine version is < 3.27 we use old method for backup if sqlite_v.numeric +< v3_27.numeric then - logWarning(logger, "The current SQLite engine v"+sqlite_v+" doesn't support vaccum into. Fallback to previous method"); + logger(logWarning, "The current SQLite engine v"+sqlite_v+" doesn't support vaccum into. Fallback to previous method"); backup_database(logger, db_path, main_db_name, []) else //construct the target folder for backup with dir_save = db_path + dir_save_database, if (Maybe(String))make_directory(dir_save) is { - failure then logError(logger, "Can't create directory '"+db_path + dir_save_database+"'"); failure, + failure then logger(logError, "Can't create directory '"+db_path + dir_save_database+"'"); failure, success(_) then with filename = db_path + dir_save_database+get_current_datetime_condensed+"-"+main_db_name, if sql_query(db, "VACUUM INTO '"+filename+"';") is { - error(err) then logError(logger,db_error(err, "Can't backup database into "+filename));failure, - ok(_,) then logInfo(logger, "database backuped into "+filename);success(unique) + error(err) then logger(logError,db_error(err, "Can't backup database into "+filename));failure, + ok(_,) then logger(logInfo, "database backuped into "+filename);success(unique) } } } @@ -210,7 +210,7 @@ define Maybe(One) do_table_indexes ( SQLite3DataBase db, - Logger logger, + (LogLevel, String) -> One logger, Migration _migration, (DB_Version) -> One update_db_version )= @@ -229,12 +229,12 @@ define Maybe(One) define Maybe(One) do_migration_loop ( - SQLite3DataBase db, - Logger logger, + SQLite3DataBase db, + (LogLevel, String) -> One logger, // String current_version, //current version of app - DB_Version db_ver, //version found in db settings - List(Migration) migrations, - (DB_Version) -> One update_db_version, + DB_Version db_ver, //version found in db settings + List(Migration) migrations, + (DB_Version) -> One update_db_version, ) = if migrations is { @@ -245,7 +245,7 @@ define Maybe(One) if compare_db_version(db_ver, migration_version) is { less then - logInfo(logger, "[less] Migrating Database from version " + db_ver + " to version " + migration_version); + logger(logInfo, "[less] Migrating Database from version " + db_ver + " to version " + migration_version); if migrate_to(db, logger) is failure then failure else @@ -253,15 +253,15 @@ define Maybe(One) do_migration_loop(db, logger, migration_version, t, update_db_version) more then - logInfo(logger, "[more] No Database migration found from version " + db_ver + " to version " + migration_version); + logger(logInfo, "[more] No Database migration found from version " + db_ver + " to version " + migration_version); do_migration_loop(db, logger, db_ver, t, update_db_version) equal then - logInfo(logger, "[equal] No Database migration found from version " + db_ver + " to version " + migration_version); + logger(logInfo, "[equal] No Database migration found from version " + db_ver + " to version " + migration_version); do_migration_loop(db, logger, db_ver, t, update_db_version) equal_but_sign then - logInfo(logger, "Database migration found from version " + db_ver + " to version " + migration_version+ " by hash difference "); + logger(logInfo, "Database migration found from version " + db_ver + " to version " + migration_version+ " by hash difference "); if migrate_to(db, logger) is failure then failure else @@ -273,18 +273,18 @@ define Maybe(One) public define Maybe(One) do_migration ( - SQLite3DataBase db, - Logger logger, - DB_Version current_db_version, - (DB_Version) -> One update_db_version, - List(Migration) all_migrations, + SQLite3DataBase db, + (LogLevel, String) -> One logger, + DB_Version current_db_version, + (DB_Version) -> One update_db_version, + List(Migration) all_migrations, )= if is_empty_database(db) then // new empty database - logInfo(logger, "No database found. Creating a new one..."); + logger(logInfo, "No database found. Creating a new one..."); if last(all_migrations) is success(migration) then do_table_indexes(db, logger, migration, update_db_version) else - logError(logger, "No database migration found. Can't create Database"); + logger(logError, "No database migration found. Can't create Database"); failure else ( @@ -301,12 +301,12 @@ public define Maybe(One) do_create_indexes ( SQLite3DataBase db, - Logger logger, + (LogLevel, String) -> One logger, List(Migration) all_migrations, )= if last(all_migrations) is { - failure then logCriticalError(logger, "Index creation: migration list is empty!"); failure, + failure then logger(logCriticalError, "Index creation: migration list is empty!"); failure, success(last_migration) then if last_migration is migration(_, _, _, create_indexes) then if create_indexes(db, logger) is success(_) then diff --git a/database/sqlite_foreign_key.anubis b/database/sqlite_foreign_key.anubis index 88b32f3..711e2bc 100644 --- a/database/sqlite_foreign_key.anubis +++ b/database/sqlite_foreign_key.anubis @@ -24,41 +24,41 @@ read data_base/db_types.anubis define Maybe(One) my_sql_query ( - Database db, - String sql, - Logger log + Database db, + String sql, + (LogLevel, String) -> One log ) = if sql_query(db, sql) is { - error(sql_error) then logError(log, "SQL ERROR: " + sql_error.text + "\n ...executing query [" + sql + "]"); failure, - ok(_,_,_) then success(unique) + error(sql_error) then log(logError, "SQL ERROR: " + sql_error.text + "\n ...executing query [" + sql + "]"); failure, + ok(_,_,_) then success(unique) }. public define Maybe(One) alter_trigger ( - Database db, - String trigger_name, - String sql, - Logger log + Database db, + String trigger_name, + String sql, + (LogLevel, String) -> One log ) = if sql_query(db, "SELECT sql FROM sqlite_master WHERE type = 'trigger' AND name = " + db_make_sql_string(trigger_name)) is { - error(sql_error) then logError(log, "SQL ERROR: " + sql_error.text + "\n ...looking for trigger named [" + trigger_name + "]"); failure, - ok(_,cursor,_) then + error(sql_error) then log(logError, "SQL ERROR: " + sql_error.text + "\n ...looking for trigger named [" + trigger_name + "]"); failure, + ok(_,cursor,_) then if cursor(unique) is { - error(sql_error) then logError(log, "alter_trigger ERROR '" + sql_error.text + "'"); failure, + error(sql_error) then log(logError, "alter_trigger ERROR '" + sql_error.text + "'"); failure, no_more_row then my_sql_query(db, sql, log), row(current) then with old_sql = text(current)(0), if old_sql /= sql then - logDebug(log, "Old trigger was:\n" + old_sql + "\n"); - logDebug(log, "New trigger is:\n" + sql + "\n"); - logInfo(log, "Updating trigger '" + trigger_name + "'..."); + log(logDebug, "Old trigger was:\n" + old_sql + "\n"); + log(logDebug, "New trigger is:\n" + sql + "\n"); + log(logInfo, "Updating trigger '" + trigger_name + "'..."); forget(my_sql_query(db, "DROP TRIGGER [" + trigger_name + "]", log)); - if my_sql_query(db, sql, log) is success(_) then logInfo (log, " --> ok."); success(unique) - else logError(log, " --> error!"); failure + if my_sql_query(db, sql, log) is success(_) then log(logInfo, " --> ok."); success(unique) + else log(logError, " --> error!"); failure else success(unique) } @@ -76,7 +76,7 @@ public define Maybe(One) String foreign_field_name, FK_Null fk_null, FK_Cascade fk_cascade, - Logger log + (LogLevel, String) -> One log ) = with constrait_name = table_name + "__" + field_name + "__" + foreign_table_name, sql_create = @@ -128,7 +128,7 @@ public define Maybe(One) String foreign_field_name, Bool field_can_be_null, Bool delete, //delete_in_cascade ? - Logger log + (LogLevel, String) -> One log ) = make_foreign_key ( diff --git a/examples/minimal_web_site_vc.anubis b/examples/minimal_web_site_vc.anubis index 3aa0f57..c4d17fe 100644 --- a/examples/minimal_web_site_vc.anubis +++ b/examples/minimal_web_site_vc.anubis @@ -4,7 +4,7 @@ *Title* A minimal web site. - *Copyright* Copyright © David RENÉwww.calexium.com. + *Copyright* Copyright © David RENÉ. *Released* diff --git a/mail/compose_email.anubis b/mail/compose_email.anubis index 3908a7c..8fa9b58 100644 --- a/mail/compose_email.anubis +++ b/mail/compose_email.anubis @@ -14,7 +14,7 @@ read system/string.anubis read system/logger.anubis read system/data_io.anubis read web/mime.anubis -read calexium_lib/net_services_protocols/logger_service.anubis +//read calexium_lib/net_services_protocols/logger_service.anubis read calexium_lib/mail/tools.anubis read calexium_lib/mail/decode_mail.anubis read calexium_lib/mail/encode_mail.anubis diff --git a/net_services/CXM_generic_client.anubis b/net_services/CXM_generic_client.anubis index a633eac..36407db 100644 --- a/net_services/CXM_generic_client.anubis +++ b/net_services/CXM_generic_client.anubis @@ -9,7 +9,7 @@ transmit system/message_transceiver.anubis transmit system/logger.anubis -transmit calexium_lib/net_services_protocols/logger_service.anubis +//transmit calexium_lib/net_services_protocols/logger_service.anubis transmit calexium_lib/CXM_message_constants.anubis transmit calexium_lib/net_services/CXM_net_services.anubis diff --git a/net_services/send_file.anubis b/net_services/send_file.anubis index add535e..416ce61 100644 --- a/net_services/send_file.anubis +++ b/net_services/send_file.anubis @@ -18,7 +18,7 @@ read system/message_queue.anubis read system/files.anubis read system/logger.anubis -read calexium_lib/net_services_protocols/logger_service.anubis +read calexium_lib/net_services_protocols/logger_client.anubis read calexium_lib/CXM_message_constants.anubis read calexium_lib/net_services/CXM_net_services.anubis read calexium_lib/net_services/CXM_generic_protocol.anubis diff --git a/net_services_protocols/logger_client.anubis b/net_services_protocols/logger_client.anubis new file mode 100644 index 0000000..6a6ebda --- /dev/null +++ b/net_services_protocols/logger_client.anubis @@ -0,0 +1,159 @@ +/* + * Created by PyramIDE. + * User: フランスのトトロ aka (David RENÉ) + * Date: 01/12/2019 + * Time: 02:09 + * © David RENÉ + */ + +transmit system/logger.anubis +read system/message_transceiver.anubis +read system/parameter/inifile.anubis +read calexium_lib/CXM_message_constants.anubis + +define One + local_net_logger + ( + String logger_server, + Message log_message + )= + with anb_log_path = find_and_replace(my_anubis_directory, "\\", "/") + "/anb_log/", + with ini = loadIniFile(anb_log_path+"config.ini"), + server_port = readWord32(ini, "GENERAL", "udp_port", 45514), + forget(send_message_by_udp(log_message, ip_address((127,0,0,1)), server_port)) +. + + +define Message + create_log_msg + ( + String uid, + String logger_name, + String log_string, + Int level + )= + with len = length(log_string), + //println("len log string "+len); + with string = if length(log_string) > 2048 then (if sub_string(log_string, 0, 2048) is success(s) then s else "?") + "... original log string length "+len + else log_string, + with log_msg = message(_CXM_LOGGER_LOG), + forget(add_string(log_msg, "UID", uid)); + forget(add_string(log_msg, "LOG_NAME", logger_name)); + forget(add_string(log_msg, "LOG_STRING", string)); + forget(add_int32(log_msg, "LEVEL", truncate_to_Word32(level))); + forget(add_int32(log_msg, "THREAD_ID", virtual_machine_id)); + log_msg +. + + +public define One + register_logger + ( + String uid, + String logger_name, + Int format_size, + Bool absolute_path, + String file_name, + LogLevel file_level, + LogLevel cons_level + )= + with register_msg = message(_CXM_LOGGER_REGISTER_LOG), + forget(add_string(register_msg, "UID", uid)); + forget(add_string(register_msg, "LOG_NAME", logger_name)); + forget(add_int32(register_msg, "FORMAT_SIZE", truncate_to_Word32(format_size))); + forget(add_string(register_msg, "FILE_NAME", file_name)); + forget( add_int32(register_msg, "FILE_LEVEL", truncate_to_Word32(get_log_level_value(file_level)))); + forget( add_int32(register_msg, "CONS_LEVEL", truncate_to_Word32(get_log_level_value(cons_level)))); + local_net_logger("127.0.0.1", register_msg) +. + +public define One + register_uid + ( + String uid, + String default_path, + Bool absolute_path + )= + with register_msg = message(_CXM_LOGGER_REGISTER_UID), + forget(add_string(register_msg, "UID", uid)); + forget(add_string(register_msg, "DEFAULT_PATH", default_path)); + forget( add_bool(register_msg, "ABSOLUTE_PATH", absolute_path)); + local_net_logger("127.0.0.1", register_msg) +. + + +public define One + log + ( + String uid, + LogLevel level, + String logger_name, + String log_string + )= + local_net_logger("127.0.0.1", create_log_msg(uid, logger_name, log_string, get_log_level_value(level))) +. + +public define One + logNone + ( + String uid, + String logger_name, + String log_string + )= + local_net_logger("127.0.0.1", create_log_msg(uid, logger_name, log_string, 0)). + +public define One + logCriticalError + ( + String uid, + String logger_name, + String log_string + )= + local_net_logger("127.0.0.1", create_log_msg(uid, logger_name, log_string, 1)). + +public define One + logError + ( + String uid, + String logger_name, + String log_string + )= + local_net_logger("127.0.0.1", create_log_msg(uid, logger_name, log_string, 2)). + +public define One + logWarning + ( + String uid, + String logger_name, + String log_string + )= + local_net_logger("127.0.0.1", create_log_msg(uid, logger_name, log_string, 3)). + +public define One + logInfo( + String uid, + String logger_name, + String log_string + )= + local_net_logger("127.0.0.1", create_log_msg(uid, logger_name, log_string, 4)). + +public define One + logDebug + ( + String uid, + String logger_name, + String log_string + )= + local_net_logger("127.0.0.1", create_log_msg(uid, logger_name, log_string, 5)). + +public define One + logTrace + ( + String uid, + String logger_name, + LogMask log_mask, + String log_string + )= + with log_msg = create_log_msg(uid, logger_name, log_string, 6), + forget(add_string(log_msg, "LOG_MASK", log_mask.mask)); + local_net_logger("127.0.0.1", log_msg). diff --git a/net_services_protocols/logger_server.anubis b/net_services_protocols/logger_server.anubis new file mode 100644 index 0000000..9e829f6 --- /dev/null +++ b/net_services_protocols/logger_server.anubis @@ -0,0 +1,302 @@ +/* + * Created by PyramIDE. + * User: フランスのトトロ aka (David RENÉ) + * Date: 01/12/2019 + * Time: 02:08 + * © David RENÉ + */ + +read tools/basis.anubis +read system/logger.anubis +read system/data_io.anubis +read system/string.anubis +read system/files.anubis +read system/parameter/inifile.anubis +read system/message_queue.anubis +read calexium_lib/CXM_message_constants.anubis + + read logger_client.anubis + +type UID_loggers: + uid_loggers( + String uid, + String base_dir, + Var(List(Logger)) loggers + ) +. + + /** get_uid_loggers + */ +define Maybe(UID_loggers) + get_uid_loggers + ( + List(UID_loggers) all_loggers, //all known logger + String _uid //searched UID loggers + )= + if all_loggers is + { + [] then failure, + [h . t] then + if h.uid = _uid then + success(h) + else + get_uid_loggers(t, _uid) + } +. + +define Maybe(Logger) + get_logger_from_uid + ( + List(UID_loggers) all_loggers, + String _uid, + String log_name, + Logger anb_logger + )= + if all_loggers is + { + [] then failure, + [h . t] then + if h.uid = _uid then + if get_logger(*h.loggers, log_name) is + { + failure then logError(anb_logger, "can't find log ["+log_name+"] in uid ["+_uid+"]");failure, + success(log) then success(log) + } + else + get_logger_from_uid(t, _uid, log_name, anb_logger) + } +. + +define Maybe(Logger) + create_logger_from_message + ( + Logger anb_logger, + Message msg, + String base_directory + )= + if find_string(msg, "LOG_NAME") is {failure then logError(anb_logger, "create_logger_from_message can't find LOG_NAME");failure, success(loggerName) then + if find_int32 (msg, "FORMAT_SIZE") is {failure then logError(anb_logger, "create_logger_from_message can't find FORMAT_SIZE");failure, success(formatting_size) then + if find_string(msg, "FILE_NAME") is {failure then logError(anb_logger, "create_logger_from_message can't find FILE_NAME");failure, success(fileName) then + if find_int32 (msg, "FILE_LEVEL") is {failure then logError(anb_logger, "create_logger_from_message can't find FILE_LEVEL");failure,success(_fileLevel) then + if find_int32 (msg, "CONS_LEVEL") is {failure then logError(anb_logger, "create_logger_from_message can't find CONS_LEVEL");failure,success(_consoleLevel) then + + with file_level = get_LogLevel_from_value(to_Int(_fileLevel)), + with console_level = get_LogLevel_from_value(to_Int(_consoleLevel)), + with final_file_path = base_directory + fileName, + make_directories(final_file_path); + success(createLogger(loggerName, to_Int(formatting_size), final_file_path, file_level, console_level)) + }}}}} +. + + /** register one logger into UID + */ +define One + register_logger + ( + Var(List(UID_loggers)) logs, + Message msg, + String base_directory, + Logger anb_logger + )= + + if find_string(msg, "UID") is { failure then logError(anb_logger, "register_logger UID not found"), success(uid) then + if find_string(msg, "LOG_NAME") is { failure then logError(anb_logger, "register_logger can't find LOG_NAME"), success(log_name) then + if get_uid_loggers(*logs, uid) is + { + failure then //the uid logger doesn't exists so we create and + logError(anb_logger, "register_logger UID logger ["+uid+"] doesn't exist. Please register the UID first"), + success(_uid_log) then + if get_logger(*_uid_log.loggers, log_name) is + { + failure then + if create_logger_from_message(anb_logger, msg, _uid_log.base_dir) is + { + failure then unique, + success(new_log) then + _uid_log.loggers <- [new_log . *_uid_log.loggers]; + logInfo(anb_logger, "register_logger: logger ["+log_name+"] created in ["+uid+"]") + } + success(_) then + logWarning(anb_logger, "register_logger: logger ["+log_name+"] already exists in ["+uid+"]") + } + } + }} +. + +define One + register_uid + ( + Var(List(UID_loggers)) logs, + Message msg, + String log_server_base_dir, + Logger anb_logger + )= + if find_string(msg, "UID") is { failure then logError(anb_logger, "register_uid can't find UID field"), success(uid) then + with default_path = find_string(msg, "DEFAULT_PATH", "/"), + abs_path = find_bool(msg, "ABSOLUTE_PATH", false), + if get_uid_loggers(*logs, uid) is + { + failure then //the uid logger doesn't exists so we create and + with base_dir = if abs_path then default_path else log_server_base_dir + default_path, + with new_uid = uid_loggers(uid, base_dir, var([])), + logs <- [ new_uid . *logs]; + logInfo(anb_logger, "register_uid UID logger ["+uid+"] success with base dir '"+base_dir+"'.") + success(_) then + logError(anb_logger, "register_uid UID logger ["+uid+"] already exists.") + }} +. + +define Bool + process_log + ( + Logger log, + Message msg + )= + if find_string(msg, "LOG_STRING") is {failure then logError(log, "process_log can't find LOG_STRING");false, success(log_string) then + if find_int32 (msg, "LEVEL") is {failure then logError(log, "process_log can't find LEVEL");false, success(int_level) then + if find_int32 (msg, "THREAD_ID") is {failure then logError(log, "process_log can't find THREAD_ID");false, success(thread_id) then + + with level = get_LogLevel_from_value(to_Int(int_level)), + if level is logTrace then + if find_string(msg, "LOG_MASK") is + { + failure then + //println("process_log can't find LogMask ["+log_string+"]"); + logError(log, "process_log can't find LOG_MASK");false, + success(log_mask) then logTrace(log, logMask(log_mask), log_string, thread_id); true + } + else doLog(log, log_string, level, thread_id); true + + } + } + }. + +define Bool + process_log + ( + List(Logger) logs, + Message msg + )= + if find_string(msg, "LOG_NAME") is + { + failure then println("process_log can't find LOG_NAME");false, + success(log_name) then + if get_logger(logs, log_name) is + { + failure then println("can't find log ["+log_name+"]");false, + success(log) then process_log(log, msg) + } + } +. + +define Bool + process_log + ( + List(UID_loggers) logs, + Message msg, + Logger anb_logger + )= + with uid = if find_string(msg, "UID") is { failure then "", success(_uid) then _uid}, + + if find_string(msg, "LOG_NAME") is + { + failure then logError(anb_logger, "process_log can't find LOG_NAME");false, + success(log_name) then + if get_logger_from_uid(logs, uid, log_name, anb_logger) is + { + failure then logError(anb_logger, "can't find log ["+log_name+"] in ["+uid+"]");false, + success(log) then process_log(log, msg) + } + } +. + +public define String + data_preview + ( + ByteArray data, + Int max + ) = + with l = length(data), + firsts_bytes = extract(data, 0, max), + "Length=" + l + "; String='"+to_string(firsts_bytes)+"' Buffer=[" + to_ascii(firsts_bytes) + (if l > max then "...]" else "]"). + + +define (UDP_Socket, ByteArray, Truncation, Word32, Word32) -> One + make_udp_handler + ( + Var(List(UID_loggers)) logs, + String base_directory, + Logger anb_logger + ) = + ( + UDP_Socket socket, + ByteArray data, + Truncation truncation, + Word32 ip_address, + Word32 ip_port + ) |-> + with ip = ip_addr_to_string(ip_address), + logTrace(anb_logger, logMask("Logger"), "LoggerServer: data received (" + length(data) + " bytes) from IP " + ip + "... "); + //println("LoggerServer: data received (" + length(data) + " bytes) from IP " + ip + "... "); + //println("LoggerServer: data_preview " + data_preview(data, 20)); + + if receive_message_from_io(make_data_io(data)) is + { + failure then + //println("LoggerServer: Bad data packet received from IP " + ip + ": " + data_preview(data, 20)); + logWarning(anb_logger, "LoggerServer: Bad data packet received from IP " + ip + ": " + data_preview(data, 20)), + success(msg) then + if *msg.what = _CXM_LOGGER_LOG then + forget(process_log(*logs, msg, anb_logger)) + else if *msg.what = _CXM_LOGGER_REGISTER_UID then + forget(register_uid(logs, msg, base_directory, anb_logger)) + else if *msg.what = _CXM_LOGGER_REGISTER_LOG then + forget(register_logger(logs, msg, base_directory, anb_logger)) + else + logError(anb_logger, "LoggerService: wrong message_received. [" + to_hexa(*msg.what) + "] is not _CXM_LOGGER_LOG or _CXM_LOGGER_REGISTER or _CXM_LOGGER_UNREGISTER ") +} +. +define One + my_notify + ( + One dummy + ) = + unique. + +public define Maybe(UDP_Server) + start_logger_server + ( + Var(List(UID_loggers)) logs, + Logger anb_logger, + Word32 logger_listen_port, + String base_directory + ) = + if start_udp_server(0, + logger_listen_port, + make_udp_handler(logs, base_directory, anb_logger), + 8*1024, + my_notify) is + { + cannot_create_the_socket then logError(anb_logger, "Cannot create the listening socket."); failure, + cannot_bind_address_port then logError(anb_logger, "Cannot bind to port " + logger_listen_port + "."); failure, + access_denied then logError(anb_logger, "Cannot listen on port " + logger_listen_port + "."); failure, + ok(server) then logInfo(anb_logger, "LocalLog Server started on port " + logger_listen_port + "."); success(server) + } +. + + +global define One + anb_log + ( + List(String) args + )= + with anb_log_path = find_and_replace(my_anubis_directory, "\\", "/") + "/anb_log/", + with ini = loadIniFile(anb_log_path+"config.ini"), + server_port = readWord32(ini, "GENERAL", "udp_port", 45514), + base_directory = readString(ini, "GENERAL", "base_directory", anb_log_path+"log/"), + make_directories(base_directory); + //create own logger + with anb_logger = createLogger("anb_log", 7, base_directory + "anb_log.log", logDebug, logDebug), + + forget(start_logger_server(var([]), anb_logger, server_port, base_directory)) +. diff --git a/net_services_protocols/logger_service.anubis b/net_services_protocols/logger_service.anubis deleted file mode 100644 index 8faa12c..0000000 --- a/net_services_protocols/logger_service.anubis +++ /dev/null @@ -1,413 +0,0 @@ -/* - * - * User: David RENE - * Date: 29/07/2007 - * Time: 02:04 - * (c) Calexium - * - */ - -read tools/basis.anubis -read system/muscle.anubis -read system/data_io.anubis -read system/convert.anubis -read system/string.anubis -read system/logger.anubis -read system/message_queue.anubis -read system/message_transceiver.anubis - -read calexium_lib/CXM_message_constants.anubis -read calexium_lib/net_services/CXM_net_services.anubis -read calexium_lib/net_services/CXM_generic_protocol.anubis - -// Special non-existing file. This is a work arround for a impossibility to define global configuration in anubis. -// So this file allows you to specify on which UDP port the logger server is listening. -// You have to provide this file in your base source directory (or any other folder which is scanned by the compiler, -// and you define a function named 'logger_port' which simply return the port number as an Word32. -// Example: -// public define Word32 logger_port = 33610. -read config/logger_config.anubis - -// previous 'read' replaced by an empty declaration. Should be defined into main source file. - public define Word32 logger_port. - -public define Word32 logger_srv_version = 1. - - /** - * has_update scan the given message for finding corresponding available update - * package for the application. The request message come with AppId field which contain - * package or application signature and CurrentVersion field which is current version - * installed on the requester. - * - * --- REQUEST message format - * msg [_CXM_UPD_HAS_UPDATE] - * string "AppId" = hash or unique signature of the package - * string "CurrentVersion" = current version installed on the remote caller - * - * --- ANSWER message format - * - * ERROR case message format - * msg [_CXM_ACK] - * int32 "CMD" = _CXM_UPD_HAS_UPDATE - * int32 "STATUS" = _CXM_ERROR - * - * OK without update available - * msg [_CXM_ACK] - * int32 "CMD" = _CXM_UPD_HAS_UPDATE - * int32 "STATUS" = _CXM_OK - * msg "RESULT" [_CXM_ACK_RESULT_MSG] - * int32 "PackageStatus" = no_update // numerical value = 0 - * - */ - -define Bool - process_log - ( - Logger log, - Message msg - )= - if find_string(msg, "LogString") is - { - failure then - //println("process_log can't find LogString"); - logError(log, "process_log can't find LogString");false, - - success(log_string) then - if find_int32(msg, "Level") is - { - failure then - //println("process_log can't find Level ["+log_string+"]"); - logError(log, "process_log can't find Level");false, - success(int_level) then - if find_int32(msg, "Thread") is - { - failure then - //println("process_log can't find Thread ["+log_string+"]"); - logError(log, "process_log can't find Thread");false, - success(thread_id) then - //println("*-*-> t["+thread_id+"] l["+int_level+"] s["+log_string+"]"); - with level = get_LogLevel_from_value(to_Int(int_level)), - if level is logTrace then - if find_string(msg, "LogMask") is - { - failure then - //println("process_log can't find LogMask ["+log_string+"]"); - logError(log, "process_log can't find LogMask");false, - success(log_mask) then logTrace(log, logMask(log_mask), log_string, thread_id); true - } - else doLog(log, log_string, level, thread_id); true -// { -// logNone then true, -// logCriticalError then logCriticalError(log, log_string); true, -// logError then logError(log, log_string); true, -// logWarning then logWarning(log, log_string); true, -// logInfo then logInfo(log, log_string); true, -// logDebug then logDebug(log, log_string); true -// logTrace then -// if find_string(msg, "LogMask") is -// { -// failure then logError(log, "process_log can't find LogMask");false, -// success(log_mask) then logTrace(log, logMask(log_mask),log_string); true -// } -// } - } - } - }. - -define Bool - process_log - ( - List(Logger) logs, - Message msg - )= - if find_string(msg, "LogName") is - { - failure then println("process_log can't find LogName");false, - success(log_name) then - if get_logger(logs, log_name) is - { - failure then println("can't find log ["+log_name+"]");false, - success(log) then process_log(log, msg) - } - }. - - /** message_received is the principal - */ - /* - define One - message_received - ( - MessageQueue queue, - List(Logger) logs, - Message msg - )= - with msg_what = *msg.what, - if msg_what = _CXM_LOGGER_LOG then - send_result(queue, _CXM_LOGGER_LOG, process_log(logs, msg)) - else - println("wrong message_received is not _CXM_LOGGER_LOG ");unique - . - - define One - logger_handler - ( - MessageQueue queue, - List(Logger) logs - )= - if queue.get_next_received_Message(1) is - { - timeout then //println("logger_handler timeout ["+queue.get_name(unique)+"]"); - logger_handler(queue, logs), - closed then //println("logger_handler closed ["+queue.get_name(unique)+"]"); - unique, - msg(msg) then //println("logger_handler msg received ["+queue.get_name(unique)+"]"); - message_received(queue, logs, msg); - logger_handler(queue, logs) - }. - - public define NetService - logger_service - ( - List(Logger) logs - )= - net_service( - logger_srv_version, - _CXM_LOGGER_SERVICE_ID, //id of the service declared in CXM_message_constants - "Logger service", //human readable name of the service - ( - MessageQueue queue, - String peer - ) |-> logger_handler(queue, logs)). - - */ - /****************** LOCAL UDP SERVICE *************/ - - -public define String - data_preview - ( - ByteArray data, - Int max - ) = - with l = length(data), - firsts_bytes = extract(data, 0, max), - "Length=" + l + "; String='"+to_string(firsts_bytes)+"' Buffer=[" + to_ascii(firsts_bytes) + (if l > max then "...]" else "]"). - -define (UDP_Socket, ByteArray, Truncation, Word32, Word32) -> One - make_udp_handler - ( - List(Logger) logs, - Logger debug_logger - ) = - ( - UDP_Socket socket, - ByteArray data, - Truncation truncation, - Word32 ip_address, - Word32 ip_port - ) |-> - with ip = ip_addr_to_string(ip_address), - logTrace(debug_logger, logMask("Logger"), "LoggerServer: data received (" + length(data) + " bytes) from IP " + ip + "... "); - //println("LoggerServer: data received (" + length(data) + " bytes) from IP " + ip + "... "); - //println("LoggerServer: data_preview " + data_preview(data, 20)); - - if receive_message_from_io(make_data_io(data)) is - { - failure then - //println("LoggerServer: Bad data packet received from IP " + ip + ": " + data_preview(data, 20)); - logWarning(debug_logger, "LoggerServer: Bad data packet received from IP " + ip + ": " + data_preview(data, 20)), - success(msg) then - if *msg.what = _CXM_LOGGER_LOG then - forget(process_log(logs, msg)) - else - println("LoggerService: wrong message_received. [" + to_hexa(*msg.what) + "] is not _CXM_LOGGER_LOG ") -}. - -define One - my_notify - ( - One dummy - ) = - unique. - -public define Maybe(UDP_Server) - start_logger_server - ( - List(Logger) logs, - Logger debug_logger - ) = - if start_udp_server(0, - logger_port, - make_udp_handler(logs, debug_logger), - 8*1024, - my_notify) is - { - cannot_create_the_socket then logError(debug_logger, "Cannot create the listening socket."); failure, - cannot_bind_address_port then logError(debug_logger, "Cannot bind to port " + logger_port + "."); failure, - access_denied then logError(debug_logger, "Cannot listen on port " + logger_port + "."); failure, - ok(server) then logInfo(debug_logger, "LocalLog Server started on port " + logger_port + "."); success(server) - }. - - - /****************** CLIENT PART *******************/ - -define One - local_net_logger - ( - String logger_server, - Message log_message - )= - forget(send_message_by_udp(log_message, ip_address((127,0,0,1)), logger_port)). - - -define Message - create_log_msg - ( - String logger_name, - String log_string, - Int level - )= - with len = length(log_string), - //println("len log string "+len); - with string = if length(log_string) > 2048 then (if sub_string(log_string, 0, 2048) is success(s) then s else "?") + "... original log string length "+len - else log_string, - with log_msg = message(_CXM_LOGGER_LOG), - forget(add_string(log_msg, "LogName", logger_name)); - forget(add_string(log_msg, "LogString", string)); - forget(add_int32(log_msg, "Level", truncate_to_Word32(level))); - forget(add_int32(log_msg, "Thread", virtual_machine_id)); - log_msg - . -*/ - -// HACK Begin of Hacked version - define String debug_log = "Debug". - define String config_log = "Config". - define String incoming_log = "Incoming". - define String outgoing_log = "Outgoing". - define String pop3_log = "POP3". - define String mailing_log = "Mailing". - define String errors_log = "Errors". - define String security_log = "Security". - define String spams_log = "Spams". - define String api_log = "MF_API". - define String internal_log = "INTERNAL". - - - define String - get_log_file - ( - String log_name - ) = - if log_name = debug_log then "debug.log" - else if log_name = "SendMail" then "debug.log" - else if log_name = config_log then "config.log" - else if log_name = incoming_log then "incoming.log" - else if log_name = outgoing_log then "outgoing.log" - else if log_name = pop3_log then "pop3.log" - else if log_name = mailing_log then "mailing.log" - else if log_name = errors_log then "errors.log" - else if log_name = "DB" then "errors.log" - else if log_name = "SQL" then "sql_profiling.log" - else if log_name = security_log then "security.log" - else if log_name = spams_log then "spams.log" - else if log_name = api_log then "api.log" - else if log_name = internal_log then "internal" - else "unknown.log". - - - define One - local_net_logger - ( - String logger_server, - One _ - )= - unique. - - define One - create_log_msg - ( - String logger_name, - String log_string, - Int level - )= - with log = createLogger(logger_name, 8, "/var/MailFountain/log/" + get_log_file(logger_name), logTrace, logTrace), - logLevel = get_LogLevel_from_value(level), - protect - doLog(log, log_string, logLevel, virtual_machine_id). - -// HACK End of Hacked version - - - -public define One - log( - LogLevel level, - String logger_name, - String log_string - )= - local_net_logger("127.0.0.1", create_log_msg(logger_name, log_string, get_log_level_value(level))). - -public define One - logNone( - String logger_name, - String log_string - )= - local_net_logger("127.0.0.1", create_log_msg(logger_name, log_string, 0)). - -public define One - logCriticalError( - String logger_name, - String log_string - )= - local_net_logger("127.0.0.1", create_log_msg(logger_name, log_string, 1)). - -public define One - logError( - String logger_name, - String log_string - )= - local_net_logger("127.0.0.1", create_log_msg(logger_name, log_string, 2)). - -public define One - logWarning( - String logger_name, - String log_string - )= - local_net_logger("127.0.0.1", create_log_msg(logger_name, log_string, 3)). - -public define One - logInfo( - String logger_name, - String log_string - )= - local_net_logger("127.0.0.1", create_log_msg(logger_name, log_string, 4)). - -public define One - logDebug( - String logger_name, - String log_string - )= - local_net_logger("127.0.0.1", create_log_msg(logger_name, log_string, 5)). - -public define One - logTrace( - String logger_name, - LogMask log_mask, - String log_string - )= - with log_msg = create_log_msg(logger_name, log_string, 6), - forget(add_string(log_msg, "LogMask", log_mask.mask)); - local_net_logger("127.0.0.1", log_msg). - -// HACK hacked version - public define One - logTrace( - String logger_name, - LogMask log_mask, - String log_string - )= - if log_mask is logMask(mask) then - if mask = "send_mail" | mask = "smtp" | mask = "sql_profiling" then - local_net_logger("127.0.0.1", create_log_msg(logger_name, log_string, 6)) - else unique. diff --git a/net_services_protocols/logger_service_deprecated.anubis b/net_services_protocols/logger_service_deprecated.anubis new file mode 100644 index 0000000..b8d4792 --- /dev/null +++ b/net_services_protocols/logger_service_deprecated.anubis @@ -0,0 +1,370 @@ +/* + * + * User: David RENÉ + * Date: 29/07/2007 + * Time: 02:04 + * © David RENÉ + * + */ + +read tools/basis.anubis +read system/muscle.anubis +read system/data_io.anubis +read system/convert.anubis +read system/string.anubis +read system/logger.anubis +read system/message_queue.anubis +read system/message_transceiver.anubis + +read system/files.anubis + +read calexium_lib/CXM_message_constants.anubis +read calexium_lib/net_services/CXM_net_services.anubis +read calexium_lib/net_services/CXM_generic_protocol.anubis + +// Special non-existing file. This is a work arround for a impossibility to define global configuration in anubis. +// So this file allows you to specify on which UDP port the logger server is listening. +// You have to provide this file in your base source directory (or any other folder which is scanned by the compiler, +// and you define a function named 'logger_port' which simply return the port number as an Word32. +// Example: +// public define Word32 logger_port = 33610. +// read config/logger_config.anubis + +// previous 'read' replaced by an empty declaration. Should be defined into main source file. + public define Word32 logger_port. + + + + public define Word32 logger_srv_version = 1. + + /** + * has_update scan the given message for finding corresponding available update + * package for the application. The request message come with AppId field which contain + * package or application signature and CurrentVersion field which is current version + * installed on the requester. + * + * --- REQUEST message format + * msg [_CXM_UPD_HAS_UPDATE] + * string "AppId" = hash or unique signature of the package + * string "CurrentVersion" = current version installed on the remote caller + * + * --- ANSWER message format + * + * ERROR case message format + * msg [_CXM_ACK] + * int32 "CMD" = _CXM_UPD_HAS_UPDATE + * int32 "STATUS" = _CXM_ERROR + * + * OK without update available + * msg [_CXM_ACK] + * int32 "CMD" = _CXM_UPD_HAS_UPDATE + * int32 "STATUS" = _CXM_OK + * msg "RESULT" [_CXM_ACK_RESULT_MSG] + * int32 "PackageStatus" = no_update // numerical value = 0 + * + */ + + define Bool + process_log + ( + Logger log, + Message msg + )= + if find_string(msg, "LogString") is + { + failure then + //println("process_log can't find LogString"); + logError(log, "process_log can't find LogString");false, + + success(log_string) then + if find_int32(msg, "Level") is + { + failure then + //println("process_log can't find Level ["+log_string+"]"); + logError(log, "process_log can't find Level");false, + success(int_level) then + if find_int32(msg, "Thread") is + { + failure then + //println("process_log can't find Thread ["+log_string+"]"); + logError(log, "process_log can't find Thread");false, + success(thread_id) then + //println("*-*-> t["+thread_id+"] l["+int_level+"] s["+log_string+"]"); + with level = get_LogLevel_from_value(to_Int(int_level)), + if level is logTrace then + if find_string(msg, "LogMask") is + { + failure then + //println("process_log can't find LogMask ["+log_string+"]"); + logError(log, "process_log can't find LogMask");false, + success(log_mask) then logTrace(log, logMask(log_mask), log_string, thread_id); true + } + else doLog(log, log_string, level, thread_id); true +// { +// logNone then true, +// logCriticalError then logCriticalError(log, log_string); true, +// logError then logError(log, log_string); true, +// logWarning then logWarning(log, log_string); true, +// logInfo then logInfo(log, log_string); true, +// logDebug then logDebug(log, log_string); true +// logTrace then +// if find_string(msg, "LogMask") is +// { +// failure then logError(log, "process_log can't find LogMask");false, +// success(log_mask) then logTrace(log, logMask(log_mask),log_string); true +// } +// } + } + } + }. + + define Bool + process_log + ( + List(Logger) logs, + Message msg + )= + if find_string(msg, "LogName") is + { + failure then println("process_log can't find LogName");false, + success(log_name) then + if get_logger(logs, log_name) is + { + failure then println("can't find log ["+log_name+"]");false, + success(log) then process_log(log, msg) + } + } +. + +//define Bool +// process_log +// ( +// List(UID_loggers) logs, +// Message msg +// )= +// with uid = if find_string(msg, "UID") is { failure then "", success(_uid) then _uid}, +// +// if find_string(msg, "LogName") is +// { +// failure then println("process_log can't find LogName");false, +// success(log_name) then +// if get_logger(logs, uid, log_name) is +// { +// failure then println("can't find log ["+log_name+"]");false, +// success(log) then process_log(log, msg) +// } +// } +//. + + /** message_received is the principal + */ + /* + define One + message_received + ( + MessageQueue queue, + List(Logger) logs, + Message msg + )= + with msg_what = *msg.what, + if msg_what = _CXM_LOGGER_LOG then + send_result(queue, _CXM_LOGGER_LOG, process_log(logs, msg)) + else + println("wrong message_received is not _CXM_LOGGER_LOG ");unique + . + + define One + logger_handler + ( + MessageQueue queue, + List(Logger) logs + )= + if queue.get_next_received_Message(1) is + { + timeout then //println("logger_handler timeout ["+queue.get_name(unique)+"]"); + logger_handler(queue, logs), + closed then //println("logger_handler closed ["+queue.get_name(unique)+"]"); + unique, + msg(msg) then //println("logger_handler msg received ["+queue.get_name(unique)+"]"); + message_received(queue, logs, msg); + logger_handler(queue, logs) + }. + + public define NetService + logger_service + ( + List(Logger) logs + )= + net_service( + logger_srv_version, + _CXM_LOGGER_SERVICE_ID, //id of the service declared in CXM_message_constants + "Logger service", //human readable name of the service + ( + MessageQueue queue, + String peer + ) |-> logger_handler(queue, logs)). + + */ + /****************** LOCAL UDP SERVICE *************/ + + + public define String + data_preview + ( + ByteArray data, + Int max + ) = + with l = length(data), + firsts_bytes = extract(data, 0, max), + "Length=" + l + "; String='"+to_string(firsts_bytes)+"' Buffer=[" + to_ascii(firsts_bytes) + (if l > max then "...]" else "]"). + + define (UDP_Socket, ByteArray, Truncation, Word32, Word32) -> One + make_udp_handler + ( + List(Logger) logs, + Logger debug_logger + ) = + ( + UDP_Socket socket, + ByteArray data, + Truncation truncation, + Word32 ip_address, + Word32 ip_port + ) |-> + with ip = ip_addr_to_string(ip_address), + logTrace(debug_logger, logMask("Logger"), "LoggerServer: data received (" + length(data) + " bytes) from IP " + ip + "... "); + //println("LoggerServer: data received (" + length(data) + " bytes) from IP " + ip + "... "); + //println("LoggerServer: data_preview " + data_preview(data, 20)); + + if receive_message_from_io(make_data_io(data)) is + { + failure then + //println("LoggerServer: Bad data packet received from IP " + ip + ": " + data_preview(data, 20)); + logWarning(debug_logger, "LoggerServer: Bad data packet received from IP " + ip + ": " + data_preview(data, 20)), + success(msg) then + if *msg.what = _CXM_LOGGER_LOG then + forget(process_log(logs, msg)) + else + println("LoggerService: wrong message_received. [" + to_hexa(*msg.what) + "] is not _CXM_LOGGER_LOG ") +}. + + + + define One + my_notify + ( + One dummy + ) = + unique. + + public define Maybe(UDP_Server) + start_logger_server + ( + List(Logger) logs, + Logger debug_logger + ) = + if start_udp_server(0, + logger_port, + make_udp_handler(logs, debug_logger), + 8*1024, + my_notify) is + { + cannot_create_the_socket then logError(debug_logger, "Cannot create the listening socket."); failure, + cannot_bind_address_port then logError(debug_logger, "Cannot bind to port " + logger_port + "."); failure, + access_denied then logError(debug_logger, "Cannot listen on port " + logger_port + "."); failure, + ok(server) then logInfo(debug_logger, "LocalLog Server started on port " + logger_port + "."); success(server) + }. + + + + + /****************** CLIENT PART *******************/ + + define One + local_net_logger + ( + String logger_server, + Message log_message + )= + forget(send_message_by_udp(log_message, ip_address((127,0,0,1)), logger_port)). + + + define Message + create_log_msg + ( + String logger_name, + String log_string, + Int level + )= + with len = length(log_string), + //println("len log string "+len); + with string = if length(log_string) > 2048 then (if sub_string(log_string, 0, 2048) is success(s) then s else "?") + "... original log string length "+len + else log_string, + with log_msg = message(_CXM_LOGGER_LOG), + forget(add_string(log_msg, "LogName", logger_name)); + forget(add_string(log_msg, "LogString", string)); + forget(add_int32(log_msg, "Level", truncate_to_Word32(level))); + forget(add_int32(log_msg, "Thread", virtual_machine_id)); + log_msg + . +*/ + + public define One + log( + LogLevel level, + String logger_name, + String log_string + )= + local_net_logger("127.0.0.1", create_log_msg(logger_name, log_string, get_log_level_value(level))). + + public define One + logNone( + String logger_name, + String log_string + )= + local_net_logger("127.0.0.1", create_log_msg(logger_name, log_string, 0)). + + public define One + logCriticalError( + String logger_name, + String log_string + )= + local_net_logger("127.0.0.1", create_log_msg(logger_name, log_string, 1)). + + public define One + logError( + String logger_name, + String log_string + )= + local_net_logger("127.0.0.1", create_log_msg(logger_name, log_string, 2)). + + public define One + logWarning( + String logger_name, + String log_string + )= + local_net_logger("127.0.0.1", create_log_msg(logger_name, log_string, 3)). + + public define One + logInfo( + String logger_name, + String log_string + )= + local_net_logger("127.0.0.1", create_log_msg(logger_name, log_string, 4)). + + public define One + logDebug( + String logger_name, + String log_string + )= + local_net_logger("127.0.0.1", create_log_msg(logger_name, log_string, 5)). + + public define One + logTrace( + String logger_name, + LogMask log_mask, + String log_string + )= + with log_msg = create_log_msg(logger_name, log_string, 6), + forget(add_string(log_msg, "LogMask", log_mask.mask)); + local_net_logger("127.0.0.1", log_msg). diff --git a/net_services_protocols/logger_test.anubis b/net_services_protocols/logger_test.anubis new file mode 100644 index 0000000..b73cd1f --- /dev/null +++ b/net_services_protocols/logger_test.anubis @@ -0,0 +1,39 @@ +/* + * Created by PyramIDE. + * User: フランスのトトロ aka (David RENÉ) + * Date: 01/12/2019 + * Time: 19:52 + * © David RENÉ + */ + +read tools/basis.anubis +read logger_client.anubis + +global define One + logger_test + ( + List(String) args + )= + with app0 = "logger test0", + uid0_dir = "logger test0/", +log_name0_0 = "log_name0_0", +log_name0_1 = "log_name0_1", + uid1 = "logger test1", + + register_uid(app0, uid0_dir, false); + register_logger(app0, log_name0_0, 8, false, log_name0_0+".log", logDebug, logDebug); + register_logger(app0, log_name0_1, 8, false, log_name0_1+".log", logDebug, logDebug); + sleep(1000); + logNone (app0, log_name0_0, "logNone in log_name0_0"); + logNone (app0, log_name0_1, "logNone in log_name0_1"); + logCriticalError (app0, log_name0_0, "logCriticalError in log_name0_0"); + logCriticalError (app0, log_name0_1, "logCriticalError in log_name0_1"); + logError (app0, log_name0_0, "logError in log_name0_0"); + logError (app0, log_name0_1, "logError in log_name0_1"); + logWarning (app0, log_name0_0, "logWarning in log_name0_0"); + logWarning (app0, log_name0_1, "logWarning in log_name0_1"); + logInfo (app0, log_name0_0, "logInfo in log_name0_0"); + logInfo (app0, log_name0_1, "logInfo in log_name0_1"); + logDebug (app0, log_name0_0, "logDebug in log_name0_0"); + logDebug (app0, log_name0_1, "logDebug in log_name0_1") +. diff --git a/web/CXM_making_a_web_site.anubis b/web/CXM_making_a_web_site.anubis index c80d604..3e66ca0 100644 --- a/web/CXM_making_a_web_site.anubis +++ b/web/CXM_making_a_web_site.anubis @@ -1492,6 +1492,8 @@ public define HTML_Off_Form img(String src, String alt) public define HTML_Off_Form img(List(CoreAttrs) attrs, String src) = img(attrs, src, ""). public define HTML_Off_Form img(CoreAttrs attr, String src) = img([attr], src, ""). public define HTML_Off_Form img(String src, Int width, Int height) = img([attr("width",to_String(width)+"px"), attr("height",to_String(height)+"px")], src, src). +public define HTML_Off_Form img(String src, String alt, Int width, Int height) = + html_void_tag("img", [attr("src",src), attr("alt",alt), attr("width",to_String(width)+"px"), attr("height",to_String(height)+"px")]). public define HTML_Off_Form img(List(CoreAttrs) attrs, String src, String alt, Int width, Int height) = html_void_tag("img", attrs + [attr("src",src), attr("alt",alt), attr("width",to_String(width)+"px"), attr("height",to_String(height)+"px")]). public define HTML_Off_Form img(CoreAttrs _attr, String src, String alt, Int width, Int height) = @@ -1561,6 +1563,12 @@ public define HTML_Off_Form strong(CoreAttrs attr, HTML_Off_Form content) public define HTML_Off_Form strong(List(HTML_Off_Form) content) = html_tag("strong", [], content). public define HTML_Off_Form strong(HTML_Off_Form content) = html_tag("strong", [], [content]). + //