11defmodule Csv2sql do
2- def main ( _args \\ [ ] ) do
2+ def main ( args ) do
33 Csv2sql.Helpers . greet ( )
44 # Load configuration varaibles dynamically for escripts, this is required
55 # since configuration variables are set to whatever they where when the
66 # escript was build and cannot be changed later
7- update_config ( )
7+ update_config ( args )
88
99 Csv2sql.Application . start ( :no_args , :no_args )
1010
@@ -16,53 +16,208 @@ defmodule Csv2sql do
1616 end
1717 end
1818
19- def update_config ( ) do
19+ defp update_config ( args ) do
20+ { opts , _ , _ } =
21+ OptionParser . parse ( args ,
22+ strict: [
23+ schema_file_path: :string ,
24+ source_csv_directory: :string ,
25+ imported_csv_directory: :string ,
26+ validated_csv_directory: :string ,
27+ skip_make_schema: :boolean ,
28+ skip_insert_schema: :boolean ,
29+ skip_insert_data: :boolean ,
30+ skip_validate_import: :boolean ,
31+ db_connection_string: :string ,
32+ connection_socket: :string ,
33+ varchar_limit: :integer ,
34+ schema_infer_chunk_size: :integer ,
35+ worker_count: :integer ,
36+ db_worker_count: :integer ,
37+ insertion_chunk_size: :integer ,
38+ job_count_limit: :integer ,
39+ log: :string ,
40+ timeout: :integer ,
41+ connect_timeout: :integer ,
42+ pool_size: :integer ,
43+ queue_target: :integer ,
44+ queue_interval: :integer
45+ ]
46+ )
47+
48+ source_csv_directory =
49+ opts [ :source_csv_directory ] || System . get_env ( "csv2sql_source_csv_directory" ) || "."
50+
51+ schema_file_path =
52+ opts [ :schema_file_path ] || is_blank ( System . get_env ( "csv2sql_schema_file_path" ) ) ||
53+ source_csv_directory
54+
55+ imported_csv_directory =
56+ opts [ :imported_csv_directory ] ||
57+ ( is_blank ( System . get_env ( "csv2sql_imported_csv_directory" ) ) ||
58+ "#{ source_csv_directory } /imported" )
59+
60+ validated_csv_directory =
61+ opts [ :validated_csv_directory ] ||
62+ ( is_blank ( System . get_env ( "csv2sql_validated_csv_directory" ) ) ||
63+ "#{ source_csv_directory } /validated" )
64+
65+ make_schema =
66+ if opts [ :skip_make_schema ] ,
67+ do: false ,
68+ else: if ( System . get_env ( "csv2sql_set_make_schema" ) == "false" , do: false , else: true )
69+
70+ insert_schema =
71+ if opts [ :skip_insert_schema ] ,
72+ do: false ,
73+ else: if ( System . get_env ( "csv2sql_set_insert_schema" ) == "false" , do: false , else: true )
74+
75+ insert_data =
76+ if opts [ :skip_insert_data ] ,
77+ do: false ,
78+ else: if ( System . get_env ( "csv2sql_set_insert_data" ) == "false" , do: false , else: true )
79+
80+ validate_import =
81+ if opts [ :skip_validate_import ] ,
82+ do: false ,
83+ else: if ( System . get_env ( "csv2sql_set_validate" ) == "false" , do: false , else: true )
84+
85+ [ username , password , host , database_name ] =
86+ if opts [ :db_connection_string ] do
87+ str = opts [ :db_connection_string ]
88+
89+ [ username , tmp ] = String . split ( str , ":" )
90+
91+ [ password , tmp ] = String . split ( tmp , "@" )
92+
93+ [ host , database_name ] = String . split ( tmp , "/" )
94+
95+ [ username , password , host , database_name ]
96+ else
97+ [
98+ System . get_env ( "csv2sql_username" ) ,
99+ System . get_env ( "csv2sql_password" ) ,
100+ System . get_env ( "csv2sql_host" ) ,
101+ System . get_env ( "csv2sql_database_name" )
102+ ]
103+ end
104+
105+ connection_socket =
106+ opts [ :connection_socket ] || System . get_env ( "csv2sql_socket" ) ||
107+ "/var/run/mysqld/mysqld.sock"
108+
109+ varchar_limit =
110+ opts [ :varchar_limit ] || System . get_env ( "csv2sql_varchar_limit" ) |> to_int ( ) ||
111+ 100
112+
113+ schema_infer_chunk_size =
114+ opts [ :schema_infer_chunk_size ] ||
115+ System . get_env ( "csv2sql_schema_infer_chunk_size" ) |> to_int ( ) || 100
116+
117+ worker_count =
118+ opts [ :worker_count ] || System . get_env ( "csv2sql_db_worker_count" ) |> to_int ( ) ||
119+ 10
120+
121+ db_worker_count =
122+ opts [ :db_worker_count ] || System . get_env ( "csv2sql_db_worker_count" ) |> to_int ( ) ||
123+ 15
124+
125+ insertion_chunk_size =
126+ opts [ :insertion_chunk_size ] ||
127+ System . get_env ( "csv2sql_insertion_chunk_size" ) |> to_int ( ) || 100
128+
129+ job_count_limit =
130+ opts [ :job_count_limit ] || System . get_env ( "csv2sql_job_count_limit" ) |> to_int ( ) ||
131+ 10
132+
133+ log =
134+ if ( opts [ :log ] ,
135+ do: String . to_atom ( opts [ :log ] ) ,
136+ else: false
137+ ) ||
138+ if ( System . get_env ( "csv2sql_log" ) == "false" ) do
139+ false
140+ else
141+ if System . get_env ( "csv2sql_log" ) ,
142+ do: String . to_atom ( System . get_env ( "csv2sql_log" ) ) ,
143+ else: false
144+ end
145+
146+ timeout = opts [ :timeout ] || System . get_env ( "csv2sql_timeout" ) |> to_int ( ) || 60000
147+
148+ connect_timeout =
149+ opts [ :connect_timeout ] || System . get_env ( "csv2sql_connect_timeout" ) |> to_int ( ) ||
150+ 60000
151+
152+ pool_size = opts [ :pool_size ] || System . get_env ( "csv2sql_pool_size" ) |> to_int ( ) || 20
153+
154+ queue_target =
155+ opts [ :queue_target ] || System . get_env ( "csv2sql_queue_target" ) |> to_int ( ) || 5000
156+
157+ queue_interval =
158+ opts [ :queue_interval ] || System . get_env ( "csv2sql_queue_interval" ) |> to_int ( ) ||
159+ 1000
160+
20161 current_config = [
21162 csv2sql: [
22163 { Csv2sql.SchemaMaker ,
23164 [
24- varchar_limit: System . get_env ( "csv2sql_varchar_limit" ) |> String . to_integer ( ) ,
25- schema_file_path: System . get_env ( "csv2sql_schema_file_path" )
165+ varchar_limit: varchar_limit ,
166+ schema_file_path: schema_file_path ,
167+ schema_infer_chunk_size: schema_infer_chunk_size
26168 ] } ,
27169 { Csv2sql.MainServer ,
28170 [
29- worker_count: System . get_env ( "csv2sql_worker_count" ) |> String . to_integer ( ) ,
30- db_worker_count: System . get_env ( "csv2sql_db_worker_count" ) |> String . to_integer ( ) ,
31- source_csv_directory: System . get_env ( "csv2sql_source_csv_directory" ) ,
32- imported_csv_directory: System . get_env ( "csv2sql_imported_csv_directory" ) ,
33- validated_csv_directory: System . get_env ( "csv2sql_validated_csv_directory" ) ,
34- set_validate:
35- if ( System . get_env ( "csv2sql_set_validate" ) == "true" , do: true , else: false )
171+ worker_count: worker_count ,
172+ db_worker_count: db_worker_count ,
173+ source_csv_directory: source_csv_directory ,
174+ imported_csv_directory: imported_csv_directory ,
175+ validated_csv_directory: validated_csv_directory ,
176+ set_validate: validate_import
36177 ] } ,
37178 { Csv2sql.Worker ,
38179 [
39- set_make_schema:
40- if ( System . get_env ( "csv2sql_set_make_schema" ) == "true" , do: true , else: false ) ,
41- set_insert_schema:
42- if ( System . get_env ( "csv2sql_set_insert_schema" ) == "true" , do: true , else: false ) ,
43- set_insert_data:
44- if ( System . get_env ( "csv2sql_set_insert_data" ) == "true" , do: true , else: false )
180+ set_make_schema: make_schema ,
181+ set_insert_schema: insert_schema ,
182+ set_insert_data: insert_data
45183 ] } ,
46184 { Csv2sql.Repo ,
47185 [
48- username: System . get_env ( "csv2sql_username" ) ,
49- password: System . get_env ( "csv2sql_password" ) ,
50- host: System . get_env ( "csv2sql_host" ) ,
51- database_name: System . get_env ( "csv2sql_database_name" ) ,
52- insertion_chunk_size:
53- System . get_env ( "csv2sql_insertion_chunk_size" ) |> String . to_integer ( ) ,
54- job_count_limit: System . get_env ( "csv2sql_job_count_limit" ) |> String . to_integer ( ) ,
55- socket: System . get_env ( "csv2sql_socket" ) ,
56- log: if ( System . get_env ( "csv2sql_log" ) == "false" , do: false , else: true ) ,
57- timeout: System . get_env ( "csv2sql_timeout" ) |> String . to_integer ( ) ,
58- connect_timeout: System . get_env ( "csv2sql_connect_timeout" ) |> String . to_integer ( ) ,
59- pool_size: System . get_env ( "csv2sql_pool_size" ) |> String . to_integer ( ) ,
60- queue_target: System . get_env ( "csv2sql_queue_target" ) |> String . to_integer ( ) ,
61- queue_interval: System . get_env ( "csv2sql_queue_interval" ) |> String . to_integer ( )
186+ username: username ,
187+ password: password ,
188+ host: host ,
189+ database_name: database_name ,
190+ insertion_chunk_size: insertion_chunk_size ,
191+ job_count_limit: job_count_limit ,
192+ socket: connection_socket ,
193+ log: log ,
194+ timeout: timeout ,
195+ connect_timeout: connect_timeout ,
196+ pool_size: pool_size ,
197+ queue_target: queue_target ,
198+ queue_interval: queue_interval
62199 ] }
63200 ]
64201 ]
65202
66203 Application . put_all_env ( current_config )
67204 end
205+
206+ defp is_blank ( item , int \\ false ) do
207+ if item == nil || item == "" ,
208+ do: false ,
209+ else: if ( int , do: to_int ( item ) , else: item )
210+ end
211+
212+ defp to_int ( str ) do
213+ if is_nil ( str ) || str == "" do
214+ nil
215+ else
216+ try do
217+ String . to_integer ( str )
218+ rescue
219+ _e in ArgumentError -> nil
220+ end
221+ end
222+ end
68223end
0 commit comments