From 446ab802ff886d7456df4ae98859842f70af9910 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Sat, 15 Dec 2018 19:24:00 +0100 Subject: Get debug to okay the src files. --- src/ataxia_admin.erl | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/ataxia_admin.erl (limited to 'src/ataxia_admin.erl') diff --git a/src/ataxia_admin.erl b/src/ataxia_admin.erl new file mode 100644 index 0000000..c6eb9be --- /dev/null +++ b/src/ataxia_admin.erl @@ -0,0 +1,81 @@ +-module(ataxia_admin). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +-record +( + db_model, + { + store_file :: string(), + neighbors :: list(node()) + } +). + +-type type() :: #db_model{}. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export_type([type/0]). + +-export +( + [ + new/2, + add_db/2, + start/1 + ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec new (string(), list(node())) -> type(). +new (StorageFile, Neighbors) -> + #db_model + { + store_file = StorageFile, + neighbors = Neighbors + }. + +-spec start (type()) -> 'ok'. +start (Model) -> + StorageFile = Model#db_model.store_file, + Neighbors = Model#db_model.neighbors, + + ok = application:set_env(mnesia, dir, StorageFile), + + case mnesia:create_schema([node()|Neighbors]) of + {error, {Name, {already_exists, Name}}} -> ok; + ok -> ok + end, + + ok = mnesia:start(), + + ok. + +-spec add_db (atom(), type()) -> 'ok'. +add_db (DBName, Model) -> + Neighbors = Model#db_model.neighbors, + + mnesia:create_table + ( + DBName, + [ + {record_name, ataxia_entry:get_record_name()}, + {attributes, ataxia_entry:get_record_info()}, + {disc_copies, [node()|Neighbors]}, + {disc_only_copies, []}, + {ram_copies, []}, + {type, ordered_set}, + {local_content, false} + ] + ), + + ok. -- cgit v1.2.3-70-g09d2