myreplicator 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/myreplicator/application.js +21 -0
- data/app/assets/javascripts/myreplicator/chosen.jquery.min.js +10 -0
- data/app/assets/javascripts/myreplicator/cronwtf.js +156 -0
- data/app/assets/javascripts/myreplicator/exports.js +2 -0
- data/app/assets/javascripts/myreplicator/jquery.tipTip.minified.js +21 -0
- data/app/assets/stylesheets/myreplicator/FrancoisOne.ttf +0 -0
- data/app/assets/stylesheets/myreplicator/application.css +544 -0
- data/app/assets/stylesheets/myreplicator/asc-white.gif +0 -0
- data/app/assets/stylesheets/myreplicator/bg.gif +0 -0
- data/app/assets/stylesheets/myreplicator/bg.png +0 -0
- data/app/assets/stylesheets/myreplicator/chosen-sprite.png +0 -0
- data/app/assets/stylesheets/myreplicator/chosen.css +398 -0
- data/app/assets/stylesheets/myreplicator/clipboard-list.png +0 -0
- data/app/assets/stylesheets/myreplicator/cross.png +0 -0
- data/app/assets/stylesheets/myreplicator/desc-white.gif +0 -0
- data/app/assets/stylesheets/myreplicator/exports.css +4 -0
- data/app/assets/stylesheets/myreplicator/gear.png +0 -0
- data/app/assets/stylesheets/myreplicator/plus.png +0 -0
- data/app/assets/stylesheets/myreplicator/status-busy.png +0 -0
- data/app/assets/stylesheets/myreplicator/status.png +0 -0
- data/app/assets/stylesheets/myreplicator/tipTip.css +113 -0
- data/app/assets/stylesheets/myreplicator/websymbols-regular-webfont.eot +0 -0
- data/app/assets/stylesheets/myreplicator/websymbols-regular-webfont.svg +108 -0
- data/app/assets/stylesheets/myreplicator/websymbols-regular-webfont.ttf +0 -0
- data/app/assets/stylesheets/myreplicator/websymbols-regular-webfont.woff +0 -0
- data/app/assets/stylesheets/scaffold.css +56 -0
- data/app/controllers/myreplicator/application_controller.rb +4 -0
- data/app/controllers/myreplicator/exports_controller.rb +106 -0
- data/app/controllers/myreplicator/home_controller.rb +23 -0
- data/app/helpers/myreplicator/application_helper.rb +12 -0
- data/app/helpers/myreplicator/exports_helper.rb +4 -0
- data/app/models/myreplicator/export.rb +121 -0
- data/app/views/layouts/myreplicator/application.html.erb +24 -0
- data/app/views/myreplicator/exports/_form.html.erb +117 -0
- data/app/views/myreplicator/exports/edit.html.erb +2 -0
- data/app/views/myreplicator/exports/index.html.erb +56 -0
- data/app/views/myreplicator/exports/new.html.erb +2 -0
- data/app/views/myreplicator/exports/show.html.erb +28 -0
- data/app/views/myreplicator/home/_home_menu.erb +5 -0
- data/app/views/myreplicator/home/errors.html.erb +10 -0
- data/app/views/myreplicator/home/index.html.erb +58 -0
- data/config/routes.rb +6 -0
- data/db/migrate/20121025191622_create_myreplicator_exports.rb +35 -0
- data/lib/configuration.rb +25 -0
- data/lib/exporter/export_metadata.rb +198 -0
- data/lib/exporter/export_metadata.rb~ +9 -0
- data/lib/exporter/mysql_exporter.rb +187 -0
- data/lib/exporter/sql_commands.rb +126 -0
- data/lib/exporter/sql_commands.rb~ +5 -0
- data/lib/exporter.rb +3 -0
- data/lib/loader/import_sql.rb +91 -0
- data/lib/loader/import_sql.rb~ +27 -0
- data/lib/loader/loader.rb +122 -0
- data/lib/loader/loader.rb~ +4 -0
- data/lib/myreplicator/engine.rb +5 -0
- data/lib/myreplicator/version.rb +3 -0
- data/lib/myreplicator.rb +34 -0
- data/lib/tasks/myreplicator_tasks.rake +4 -0
- data/lib/transporter/parallelizer.rb +78 -0
- data/lib/transporter/transporter.rb +80 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +42 -0
- data/test/dummy/config/database.yml.sample +47 -0
- data/test/dummy/config/database.yml.sample~ +26 -0
- data/test/dummy/config/database.yml~ +35 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/myreplicator.yml +22 -0
- data/test/dummy/config/myreplicator.yml.sample +23 -0
- data/test/dummy/config/myreplicator.yml~ +21 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/migrate/20121101005152_sample_data.rb +24 -0
- data/test/dummy/db/migrate/20121115194022_create_myreplicator_exports.myreplicator.rb +36 -0
- data/test/dummy/db/schema.rb +45 -0
- data/test/dummy/db/seeds.rb +13 -0
- data/test/dummy/db/seeds.rb~ +1 -0
- data/test/dummy/log/development.log +1364 -0
- data/test/dummy/log/test.log +49 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/test/fixtures/myreplicator_exports.yml +0 -0
- data/test/dummy/tmp/cache/assets/C2E/D00/sprockets%2F667019818351638709494c01bddb5f68 +0 -0
- data/test/dummy/tmp/cache/assets/C83/BA0/sprockets%2F701a6339a558e5af28f150c161f43878 +0 -0
- data/test/dummy/tmp/cache/assets/C8B/150/sprockets%2F37163d05e55ad0b31b602ac5330412e3 +0 -0
- data/test/dummy/tmp/cache/assets/CBF/800/sprockets%2F00142a873933017aaa760316d0e2dcea +0 -0
- data/test/dummy/tmp/cache/assets/CC5/870/sprockets%2F4e91734f6f02a779d39f8272f627dd24 +0 -0
- data/test/dummy/tmp/cache/assets/CC9/1C0/sprockets%2Fa7a2b5a56180e1b21f783a9b30c03167 +0 -0
- data/test/dummy/tmp/cache/assets/CD5/B90/sprockets%2Fc999d13a6a21113981c0d820e8043bdf +0 -0
- data/test/dummy/tmp/cache/assets/CD7/030/sprockets%2F9ba4859590582b8b72a650b2b00b6cd2 +0 -0
- data/test/dummy/tmp/cache/assets/CDE/780/sprockets%2F6982ce9303b4e69c26f2a1a246a180e7 +0 -0
- data/test/dummy/tmp/cache/assets/CE5/670/sprockets%2Fe9e4122f1706626a21da6f8457f088ce +0 -0
- data/test/dummy/tmp/cache/assets/CF7/820/sprockets%2F6284656df87a7eb2545ed9b957560a7b +0 -0
- data/test/dummy/tmp/cache/assets/D00/9B0/sprockets%2F2bc203eb4802b393a589093debb65c04 +0 -0
- data/test/dummy/tmp/cache/assets/D00/A90/sprockets%2F3fa6fcf2205c530208681446cbc36bd3 +0 -0
- data/test/dummy/tmp/cache/assets/D0B/B30/sprockets%2F55059589d999952597c5c86e5becaf4e +0 -0
- data/test/dummy/tmp/cache/assets/D0D/DA0/sprockets%2F34d6b075a16a5a58ff4050988d8bd4b0 +0 -0
- data/test/dummy/tmp/cache/assets/D12/B40/sprockets%2F9c825562fe2a2a38bd6f41a635265bd9 +0 -0
- data/test/dummy/tmp/cache/assets/D1B/D40/sprockets%2F7cc2142509e95f7168a82a652d8d9dea +0 -0
- data/test/dummy/tmp/cache/assets/D1D/700/sprockets%2Ffe9cb975216709e2881c74b3d1d3e35f +0 -0
- data/test/dummy/tmp/cache/assets/D20/A20/sprockets%2Fb503e93ff1966dd94d03e79f291d75c1 +0 -0
- data/test/dummy/tmp/cache/assets/D26/A70/sprockets%2F63d95ae156df465783cd78e95069b2cc +0 -0
- data/test/dummy/tmp/cache/assets/D2B/E60/sprockets%2F8615ecf645b553c959544af9ff8438da +0 -0
- data/test/dummy/tmp/cache/assets/D34/F70/sprockets%2Fb93de9992473bee94e369fe3198c529c +0 -0
- data/test/dummy/tmp/cache/assets/D36/4D0/sprockets%2Fc050a64b5a803a638e155d05dcfe577d +0 -0
- data/test/dummy/tmp/cache/assets/D3E/310/sprockets%2F333a2a7535eac766267ebb7d5c2ab489 +0 -0
- data/test/dummy/tmp/cache/assets/D3F/A00/sprockets%2F7a803404e1f60b8d672d763cb9ba8af5 +0 -0
- data/test/dummy/tmp/cache/assets/D50/570/sprockets%2F6c1d20a178f66e798958d1e437fdb5da +0 -0
- data/test/dummy/tmp/cache/assets/D57/420/sprockets%2F937ea7429c536578ec7b688dee0cdf41 +0 -0
- data/test/dummy/tmp/cache/assets/D69/6F0/sprockets%2F94fff7f55bc4c300b25f3f9361ac1a52 +0 -0
- data/test/dummy/tmp/cache/assets/D86/D00/sprockets%2Fa4f32b4234d0d1bba272cd75e0d48e1d +0 -0
- data/test/dummy/tmp/cache/assets/D8B/B60/sprockets%2Faa32227c440a378ccd21218eefeb80bf +0 -0
- data/test/dummy/tmp/cache/assets/D9F/0B0/sprockets%2Faf0d2e69be3a6b56a76c20bf14d9e468 +0 -0
- data/test/dummy/tmp/cache/assets/DA8/910/sprockets%2Fab5775c4a837bd4d97ac394d473cda9b +0 -0
- data/test/dummy/tmp/cache/assets/DC0/100/sprockets%2F7a5d4f0d352bceed0dce0449c82251bd +0 -0
- data/test/dummy/tmp/cache/assets/DD2/490/sprockets%2Fa452ee92a092bc2feabc572cce49896d +0 -0
- data/test/dummy/tmp/cache/assets/DE1/320/sprockets%2F9f44ecdec8ceeef70871e15d88a448b1 +0 -0
- data/test/dummy/tmp/cache/assets/DF8/5D0/sprockets%2Fb815ed34d61cfed96222daa3bfd1d84d +0 -0
- data/test/dummy/tmp/cache/assets/E16/C70/sprockets%2F21ad93418ff75ceac86c7a85dfffe8f6 +0 -0
- data/test/dummy/tmp/cache/assets/E35/4F0/sprockets%2F96b1cdf8db6a1c8eb8abcce05958ae74 +0 -0
- data/test/dummy/tmp/cache/assets/E4E/300/sprockets%2Fefaae6e1a19a7c8f3acebdd5a36a6103 +0 -0
- data/test/fixtures/myreplicator/exports.yml +11 -0
- data/test/functional/myreplicator/exports_controller_test.rb +51 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/myreplicator_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/helpers/myreplicator/exports_helper_test.rb +6 -0
- data/test/unit/myreplicator/export_test.rb +10 -0
- data/test/unit/myreplicator/exporter_test.rb +11 -0
- data/test/unit/myreplicator/exporter_test.rb~ +10 -0
- metadata +410 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
<?xml version="1.0" standalone="no"?>
|
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg">
|
|
4
|
+
<metadata>
|
|
5
|
+
This is a custom SVG webfont generated by Font Squirrel.
|
|
6
|
+
Copyright : Copyright c 2011 by Just Be Nice studio All rights reserved
|
|
7
|
+
Designer : Igor Kiselev
|
|
8
|
+
Foundry : Just Be Nice studio
|
|
9
|
+
Foundry URL : httpwwwjustbenicestudiocom
|
|
10
|
+
</metadata>
|
|
11
|
+
<defs>
|
|
12
|
+
<font id="WebSymbolsRegular" horiz-adv-x="1000" >
|
|
13
|
+
<font-face units-per-em="1000" ascent="801" descent="-199" />
|
|
14
|
+
<missing-glyph horiz-adv-x="250" />
|
|
15
|
+
<glyph unicode=" " horiz-adv-x="250" />
|
|
16
|
+
<glyph unicode="	" horiz-adv-x="250" />
|
|
17
|
+
<glyph unicode=" " horiz-adv-x="250" />
|
|
18
|
+
<glyph unicode="!" />
|
|
19
|
+
<glyph unicode="#" horiz-adv-x="965" d="M207 259q0 -26 -42 -26h-16v52h23q35 0 35 -26zM190 355q0 -23 -34 -23h-7v46h8q33 0 33 -23zM265 -112h62v241h-62v-148h-1l-115 148h-62v-241h62v147h1zM388 -112h63v241h-63v-241zM270 252q0 55 -49 62q27 14 27 49q0 63 -72 63h-89v-241h96q37 0 62 16t25 51z M684 -107v75q-21 -26 -54 -26q-29 0 -47 18.5t-18 47.5q0 28 18 47t46 19q35 0 55 -26v75q-31 12 -57 12q-53 0 -90 -37.5t-37 -89.5q0 -54 37.5 -90t91.5 -36q22 0 55 11zM309 185h137v53h-74v42h70v53h-70v40h74v53h-137v-241zM222 561v162h-136v-51h74v-112 q0 -31 -18 -31q-11 0 -27 19l-34 -36q23 -36 62 -36q38 0 58.5 23t20.5 62zM740 -112h137v53h-75v41h71v53h-71v41h75v53h-137v-241zM484 588v135h-63v-126q0 -20 -2 -32t-12 -23t-28 -11q-27 0 -35 17.5t-8 48.5v126h-63v-135q0 -57 24.5 -84.5t81.5 -27.5q56 0 80.5 27.5 t24.5 84.5zM697 564q0 27 -16.5 43t-35.5 20.5t-35.5 11.5t-16.5 18q0 10 8.5 15t18.5 5q23 0 42 -16l25 49q-35 20 -76 20q-36 0 -59.5 -22.5t-23.5 -58.5q0 -29 16 -45t35.5 -19.5t35.5 -10.5t16 -20q0 -12 -9 -18.5t-21 -6.5q-25 0 -56 25l-26 -50q37 -28 84 -28 q43 0 68.5 22.5t25.5 65.5zM838 670h52v53h-166v-53h51v-187h63v187zM965 801v-1000h-965v1000h965z" />
|
|
20
|
+
<glyph unicode="%" d="M306 -32l161 -168h-467v467l168 -161l161 161q29 29 69 29t69 -29t29 -69t-29 -69zM1000 800v-467l-168 161l-161 -161q-29 -29 -69 -29t-69 29t-29 69t29 69l161 161l-161 168h467z" />
|
|
21
|
+
<glyph unicode="&" d="M644 382l116 -102v280h-280l102 -116l-13 -13l-213 -213l-116 102v-280h280l-102 116zM1000 300q0 -136 -67 -251t-182 -182t-251 -67t-251 67t-182 182t-67 251t67 251t182 182t251 67t251 -67t182 -182t67 -251z" />
|
|
22
|
+
<glyph unicode="'" d="M654 300l346 -346l-154 -154l-346 346l-346 -346l-154 154l346 346l-346 346l154 154l346 -346l346 346l154 -154z" />
|
|
23
|
+
<glyph unicode="(" d="M547 68l71 71l-161 161l161 161l-71 71l-233 -232zM1000 300q0 -136 -67 -251t-182 -182t-251 -67t-251 67t-182 182t-67 251t67 251t182 182t251 67t251 -67t182 -182t67 -251z" />
|
|
24
|
+
<glyph unicode=")" d="M453 68l233 232l-233 232l-71 -71l161 -161l-161 -161zM1000 300q0 -136 -67 -251t-182 -182t-251 -67t-251 67t-182 182t-67 251t67 251t182 182t251 67t251 -67t182 -182t67 -251z" />
|
|
25
|
+
<glyph unicode="*" d="M740 220l180 180h-120q-30 92 -118.5 152.5t-186.5 60.5q-131 0 -224 -92.5t-93 -223.5t93 -223.5t224 -92.5t223 92l-62 71q-66 -64 -156 -64q-91 0 -155.5 64.5t-64.5 155.5t64.5 155.5t155.5 64.5q95 0 156 -64q8 -8 11.5 -16.5t6.5 -20.5t6 -19h-120zM1000 300 q0 -136 -67 -251t-182 -182t-251 -67t-251 67t-182 182t-67 251t67 251t182 182t251 67t251 -67t182 -182t67 -251z" />
|
|
26
|
+
<glyph unicode="+" d="M560 242h235v118h-235v235h-118v-235h-236v-118h236v-236h118v236zM1000 300q0 -136 -67 -251t-182 -182t-251 -67t-251 67t-182 182t-67 251t67 251t182 182t251 67t251 -67t182 -182t67 -251z" />
|
|
27
|
+
<glyph unicode="," d="M840 505q28 28 28 67.5t-28 67.5t-67.5 28t-67.5 -28t-28 -67.5t28 -67.5t67.5 -28t67.5 28zM1000 665v-270l-595 -595l-405 405l595 595h270z" />
|
|
28
|
+
<glyph unicode="-" d="M206 242h589v118h-589v-118zM1000 300q0 -136 -67 -251t-182 -182t-251 -67t-251 67t-182 182t-67 251t67 251t182 182t251 67t251 -67t182 -182t67 -251z" />
|
|
29
|
+
<glyph unicode="." horiz-adv-x="1179" d="M1179 729q-250 -222 -600 -750l-115 -179q-144 180 -464 500l107 107l286 -250q150 150 279 271.5t205.5 187.5t131.5 111t77 59l21 14q4 0 11 -2t26 -19.5t35 -49.5z" />
|
|
30
|
+
<glyph unicode="/" d="M260 354l-54 -53q71 -71 129 -133.5t81 -89.5l22 -26q8 13 22 35.5t56.5 85.5t83.5 118.5t95 119.5t99 104q-18 35 -36 35q-10 -6 -32 -22t-113.5 -97.5t-210.5 -200.5zM500 801q136 0 251 -67t182 -182t67 -251t-67 -251t-182 -182t-251 -67t-251 67t-182 182t-67 251 t67 251t182 182t251 67z" />
|
|
31
|
+
<glyph unicode="0" d="M188 -26l-83 83l187 187l83 -83zM812 -26l-187 187l83 83l187 -187zM292 494l-187 187l83 83l187 -187zM0 428h265v-118h-265v118zM735 310v118h265v-118h-265zM559 -131h-118v265h118v-265zM559 604h-118v265h118v-265z" />
|
|
32
|
+
<glyph unicode="1" d="M188 -26l-83 83l187 187l83 -83zM812 764l83 -83l-187 -187l-83 83zM812 -26l-187 187l83 83l187 -187zM292 494l-187 187l83 83l187 -187zM0 428h265v-118h-265v118zM559 -131h-118v265h118v-265zM559 604h-118v265h118v-265z" />
|
|
33
|
+
<glyph unicode="2" d="M188 -26l-83 83l187 187l83 -83zM812 764l83 -83l-187 -187l-83 83zM292 494l-187 187l83 83l187 -187zM0 428h265v-118h-265v118zM735 310v118h265v-118h-265zM559 -131h-118v265h118v-265zM559 604h-118v265h118v-265z" />
|
|
34
|
+
<glyph unicode="3" d="M188 -26l-83 83l187 187l83 -83zM812 764l83 -83l-187 -187l-83 83zM812 -26l-187 187l83 83l187 -187zM292 494l-187 187l83 83l187 -187zM0 428h265v-118h-265v118zM735 310v118h265v-118h-265zM559 604h-118v265h118v-265z" />
|
|
35
|
+
<glyph unicode="4" d="M812 764l83 -83l-187 -187l-83 83zM812 -26l-187 187l83 83l187 -187zM292 494l-187 187l83 83l187 -187zM0 428h265v-118h-265v118zM735 310v118h265v-118h-265zM559 -131h-118v265h118v-265zM559 604h-118v265h118v-265z" />
|
|
36
|
+
<glyph unicode="5" d="M188 -26l-83 83l187 187l83 -83zM812 764l83 -83l-187 -187l-83 83zM812 -26l-187 187l83 83l187 -187zM292 494l-187 187l83 83l187 -187zM735 310v118h265v-118h-265zM559 -131h-118v265h118v-265zM559 604h-118v265h118v-265z" />
|
|
37
|
+
<glyph unicode="6" d="M188 -26l-83 83l187 187l83 -83zM812 764l83 -83l-187 -187l-83 83zM812 -26l-187 187l83 83l187 -187zM0 428h265v-118h-265v118zM735 310v118h265v-118h-265zM559 -131h-118v265h118v-265zM559 604h-118v265h118v-265z" />
|
|
38
|
+
<glyph unicode="7" d="M188 -26l-83 83l187 187l83 -83zM812 764l83 -83l-187 -187l-83 83zM812 -26l-187 187l83 83l187 -187zM292 494l-187 187l83 83l187 -187zM0 428h265v-118h-265v118zM735 310v118h265v-118h-265zM559 -131h-118v265h118v-265z" />
|
|
39
|
+
<glyph unicode=":" d="M661 182l71 71l-232 233l-232 -233l71 -71l161 161zM1000 300q0 -136 -67 -251t-182 -182t-251 -67t-251 67t-182 182t-67 251t67 251t182 182t251 67t251 -67t182 -182t67 -251z" />
|
|
40
|
+
<glyph unicode=";" d="M500 114l232 233l-71 71l-161 -161l-161 161l-71 -71zM1000 300q0 -136 -67 -251t-182 -182t-251 -67t-251 67t-182 182t-67 251t67 251t182 182t251 67t251 -67t182 -182t67 -251z" />
|
|
41
|
+
<glyph unicode="<" horiz-adv-x="654" d="M308 300l346 -346l-154 -154l-500 500l500 500l154 -154z" />
|
|
42
|
+
<glyph unicode=">" horiz-adv-x="654" d="M154 800l500 -500l-500 -500l-154 154l346 346l-346 346z" />
|
|
43
|
+
<glyph unicode="?" horiz-adv-x="586" d="M379 507q0 36 -25 61t-61 25t-61 -25t-25 -61t25 -61t61 -25t61 25t25 61zM586 507q0 -7 -1.5 -21t-17.5 -71.5t-43.5 -130t-88 -202t-142.5 -282.5q-82 153 -142.5 282t-88 204t-43 128t-17.5 73l-2 20q0 121 86 207t207 86t207 -86t86 -207z" />
|
|
44
|
+
<glyph unicode="@" horiz-adv-x="1360" d="M157 -42h1048v558l-494 -412h-61l-493 412v-558zM174 639l507 -423l507 423h-1014zM105 796h1152q43 0 74 -31t31 -74v-785q0 -44 -31 -74.5t-74 -30.5h-1152q-43 0 -74 30.5t-31 74.5v785q0 43 31 74t74 31z" />
|
|
45
|
+
<glyph unicode="A" horiz-adv-x="1113" d="M1113 507q0 -67 -26.5 -129.5t-73.5 -109.5l-448 -444l-62 61l448 444q74 72 74 178q0 89 -58.5 147.5t-147.5 58.5q-102 0 -180 -75l-493 -489q-59 -59 -59 -133q0 -57 37 -93.5t94 -36.5q75 0 134 59l377 372q53 55 53 97q0 21 -16 33t-38 12q-48 0 -86 -40l-340 -336 l-61 61l339 336q66 66 148 66q58 0 100 -37t42 -94q0 -78 -79 -159l-377 -372q-84 -84 -196 -84q-93 0 -155.5 61.5t-62.5 154.5q0 110 84 194l493 489q104 101 242 101q125 0 209.5 -84t84.5 -209z" />
|
|
46
|
+
<glyph unicode="B" d="M250 -75q0 -52 -36.5 -88.5t-88.5 -36.5t-88.5 36.5t-36.5 88.5t36.5 88.5t88.5 36.5t88.5 -36.5t36.5 -88.5zM660 -200h-192q0 194 -137 331t-331 137v192q179 0 331 -88.5t240.5 -240.5t88.5 -331zM1000 -200h-193q0 164 -64 314t-172 258t-257.5 172t-313.5 64v192 q203 0 388 -79.5t319 -213.5t213.5 -319t79.5 -388z" />
|
|
47
|
+
<glyph unicode="C" horiz-adv-x="1435" d="M1435 83q0 -111 -75.5 -192.5t-185.5 -89.5v-1h-870v1q-7 -1 -21 -1q-117 0 -200 83t-83 200q0 74 37 139t101 103q-8 32 -8 62q0 117 83 200t200 83q103 0 186 -70q43 91 128.5 145.5t185.5 54.5q144 0 246 -102t102 -246q0 -55 -16 -103q85 -29 137.5 -103t52.5 -163z " />
|
|
48
|
+
<glyph unicode="D" horiz-adv-x="1091" d="M91 -108h636v364h-636v-364zM818 256h182v363h-636v-182h454v-181zM1091 801v-636h-273v-364h-818v636h273v364h818z" />
|
|
49
|
+
<glyph unicode="F" horiz-adv-x="1391" d="M1391 419v-10l-68 -523q-5 -35 -33.5 -60.5t-64.5 -25.5h-1058q-36 0 -65.5 25.5t-33.5 60.5l-67 523q-1 3 -1 10q0 33 22.5 54.5t55.5 21.5h1235q33 0 55.5 -21.5t22.5 -54.5zM1313 583h-1235q9 48 27 67t34.5 17t34 3.5t25.5 28.5l24 72q77 29 208 29q89 0 164 -29 l25 -72q24 -23 32.5 -26t43.5 -3h485q84 0 110 -22q12 -11 22 -65z" />
|
|
50
|
+
<glyph unicode="H" horiz-adv-x="1500" d="M308 300l346 -346l-154 -154l-500 500l500 500l154 -154zM1000 800l500 -500l-500 -500l-154 154l346 346l-346 346z" />
|
|
51
|
+
<glyph unicode="I" horiz-adv-x="1360" d="M1163 7q2 -1 1 -4t-4 -3h-955h-1q-4 0 -4 4v2q18 36 135 280t144 299q1 2 3.5 2.5t3.5 -1.5l311 -386l152 122h7l1 -2q39 -50 101.5 -155t104.5 -158zM1120 480q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z M120 -80h1120v760h-1120v-760zM1360 800v-1000h-1360v1000h1360z" />
|
|
52
|
+
<glyph unicode="J" horiz-adv-x="1360" d="M760 120l117 -120h-636l-1 360h-240l300 320l300 -320h-240v-240h400zM1120 320h240l-300 -320l-300 320h240v240h-400l-117 120h636z" />
|
|
53
|
+
<glyph unicode="K" d="M613 445l-115 -115q-26 17 -56 17q-44 0 -75 -31l-175 -176q-31 -29 -31 -74q0 -44 30.5 -74.5t74.5 -30.5q25 0 49.5 12t32.5 34h238l-132 -129q-80 -78 -188 -78q-110 0 -188 78t-78 188q0 112 78 188l175 176q78 78 189 78q97 0 171 -63zM1000 534q0 -112 -78 -188 l-175 -176q-78 -78 -189 -78q-97 0 -171 63l115 115q26 -17 56 -17q44 0 75 31l175 176q31 29 31 74q0 44 -30.5 74.5t-74.5 30.5q-25 0 -49.5 -12t-32.5 -34h-238l132 129q80 78 188 78q110 0 188 -78t78 -188z" />
|
|
54
|
+
<glyph unicode="L" d="M681 391q0 113 -79.5 193t-192.5 80t-193 -80t-80 -193t80 -192.5t193 -79.5t192.5 79.5t79.5 192.5zM746 160l254 -255l-105 -105l-254 254q-106 -72 -232 -72q-169 0 -289 120t-120 289t120 289t289 120t289 -120t120 -289q0 -127 -72 -231z" />
|
|
55
|
+
<glyph unicode="M" horiz-adv-x="1360" d="M80 -120h120v80h-120v-80zM280 -120h120v80h-120v-80zM520 -120h120v80h-120v-80zM80 40h320v520h-320v-520zM720 -120h120v80h-120v-80zM80 640h120v80h-120v-80zM960 -120h120v80h-120v-80zM520 40h320v520h-320v-520zM280 640h120v80h-120v-80zM1160 -120h120v80h-120 v-80zM520 640h120v80h-120v-80zM960 40h320v520h-320v-520zM720 640h120v80h-120v-80zM960 640h120v80h-120v-80zM1160 640h120v80h-120v-80zM1360 800v-1000h-1360v1000h1360z" />
|
|
56
|
+
<glyph unicode="N" horiz-adv-x="1063" d="M775 800q126 0 207 -80t81 -207v-60q0 -285 -532 -653q-531 367 -531 653v60q0 127 80.5 207t206.5 80q81 0 134 -30.5t110 -98.5q58 68 111 98.5t133 30.5z" />
|
|
57
|
+
<glyph unicode="O" horiz-adv-x="1063" d="M946 458v50q0 58 -39 113.5t-95 61.5q-12 2 -37 2q-53 0 -83 -19.5t-72 -68.5l-89 -105l-89 105q-42 49 -72 68.5t-83 19.5q-24 0 -37 -2q-56 -6 -93.5 -60t-40.5 -115v-50q0 -30 17 -75q68 -199 398 -441q329 239 399 441q16 50 16 75zM1063 513v-60q0 -285 -532 -653 q-531 367 -531 653v60q0 127 80.5 207t206.5 80q81 0 134 -30.5t110 -98.5q58 68 111 98.5t133 30.5q126 0 207 -80t81 -207z" />
|
|
58
|
+
<glyph unicode="P" d="M680 100q0 -25 -17.5 -42.5t-42.5 -17.5q-26 0 -42 18l-120 120q-18 18 -18 62v320q0 25 17.5 42.5t42.5 17.5t42.5 -17.5t17.5 -42.5v-315l102 -103q18 -16 18 -42zM883 300q0 158 -112.5 270.5t-270.5 112.5q-126 0 -226 -74l2 -2q-48 -35 -83 -83l-2 2 q-74 -100 -74 -226q0 -158 112.5 -270.5t270.5 -112.5q126 0 226 74l-2 2q48 35 83 83l2 -2q74 100 74 226zM1000 300q0 -136 -67 -251t-182 -182t-251 -67t-251 67t-182 182t-67 251t67 251t182 182t251 67t251 -67t182 -182t67 -251z" />
|
|
59
|
+
<glyph unicode="Q" d="M585 496q0 -36 -24.5 -62t-60.5 -26t-60.5 26t-24.5 62t24.5 62t60.5 26t60.5 -26t24.5 -62zM727 217q0 26 -17.5 44.5t-42.5 18.5q-15 0 -28 -8q-70 -36 -140 -36q-69 0 -138 36q-16 7 -28 7q-25 0 -42.5 -18.5t-17.5 -44.5q0 -68 147 -97l-117 -121q-18 -18 -18 -44 t17.5 -44.5t42.5 -18.5t43 18l112 116l112 -116q18 -18 43 -18t42.5 18.5t17.5 44.5t-18 44l-117 121q147 30 147 98zM705 496q0 87 -59 150t-146 63t-146 -63t-59 -150t59 -150t146 -63t146 63t59 150zM1000 712v-824q0 -36 -26 -62t-62 -26h-824q-36 0 -62 26t-26 62v824 q0 36 26 62t62 26h824q36 0 62 -26t26 -62z" />
|
|
60
|
+
<glyph unicode="R" horiz-adv-x="1050" d="M1050 415q0 -15 -29 -38l-275 -200l105 -323q5 -17 5 -30q0 -24 -18 -24q-17 0 -38 17l-275 199l-275 -199q-23 -17 -39 -17q-18 0 -18 23q0 11 6 31l105 323l-275 200q-29 21 -29 37q0 23 49 23l340 -1l104 324q12 40 32 40q19 0 31 -40l106 -324l339 1q49 0 49 -22z " />
|
|
61
|
+
<glyph unicode="S" d="M652 300q0 60 -43 102t-103 42t-102.5 -42t-42.5 -102t42.5 -102t102.5 -42t103 42t43 102zM1000 372v-142l-185 -26q-10 -27 -21 -50l120 -157l-102 -100l-159 118q-20 -10 -51 -21l-30 -194h-143l-27 197q-21 7 -43 18l-161 -119l-101 100l121 160q-11 21 -19 46 l-199 28v142l199 28q7 21 19 45l-120 159l101 100l160 -119q15 8 47 20l28 195h143l28 -195q22 -7 48 -19l158 117l102 -100l-119 -156q13 -27 20 -48z" />
|
|
62
|
+
<glyph unicode="T" horiz-adv-x="925" d="M641 181v106q-33 -19 -87 -30.5t-100.5 -18.5t-90.5 -19.5t-70 -42.5t-26 -79q0 -62 40 -94.5t103 -32.5q103 0 167 55t64 156zM925 -173h-264q-15 40 -18 92q-120 -119 -306 -119q-95 0 -169 29t-121 95t-47 162q0 40 8.5 74t21 59.5t35.5 47.5t43 36.5t53.5 27.5 t57.5 20.5t64 15t63.5 11t65.5 8.5q50 6 100 15q24 4 37 7t34 11t32 17t19.5 25.5t8.5 38.5q0 126 -170 126q-87 0 -130.5 -31.5t-56.5 -113.5h-244q6 90 44 154t100.5 99t134.5 50.5t159 15.5q68 0 124.5 -7.5t111.5 -28.5t92.5 -54.5t60.5 -89t23 -128.5v-408 q0 -64 0.5 -91t8.5 -77.5t24 -88.5z" />
|
|
63
|
+
<glyph unicode="U" horiz-adv-x="1070" d="M1070 -137q0 -21 -2 -63h-1067q0 10 -0.5 31t-0.5 32q0 30 1 37q12 49 64 84.5t111.5 53t125.5 47t97 65.5q17 22 17 38q0 22 -11 73q-4 21 -10.5 36.5t-16 33t-15.5 31.5q-15 35 -33 132q-6 38 -6 75q0 105 53.5 168t157.5 63t157.5 -63t53.5 -168q0 -31 -7 -75 q-14 -89 -32 -132q-6 -14 -15.5 -31.5t-16 -33t-10.5 -36.5q-11 -51 -11 -73q0 -18 17 -38q31 -36 97 -65.5t125 -47t111 -53t64 -84.5q2 -8 2 -37z" />
|
|
64
|
+
<glyph unicode="V" horiz-adv-x="857" d="M429 -9q111 0 193 76t91 186h143q-9 -170 -133 -287t-294 -117q-158 0 -279 102l-150 -150v405h405l-153 -153q78 -62 177 -62zM707 651l150 150v-405h-405l153 153q-77 62 -176 62q-111 0 -193.5 -76t-91.5 -186h-143q9 170 133 287t295 117q157 0 278 -102z" />
|
|
65
|
+
<glyph unicode="W" horiz-adv-x="1113" d="M626 5q0 29 -20.5 49t-49.5 20q-28 0 -48.5 -20t-20.5 -49t20.5 -49.5t48.5 -20.5q29 0 49.5 20.5t20.5 49.5zM626 392v146h-139v-146q0 -14 2 -26.5t5.5 -28t5.5 -26.5l26 -162h59l27 162q2 10 6 26t6 28.5t2 26.5zM1113 -119q0 -39 -27.5 -59.5t-67.5 -20.5h-923 q-40 0 -67.5 21t-27.5 59q0 30 18 61l461 804q33 55 78 55t76 -55l462 -805q18 -32 18 -60z" />
|
|
66
|
+
<glyph unicode="X" horiz-adv-x="1188" d="M746 53l106 -107q-156 -146 -338 -146q-217 0 -365.5 143.5t-148.5 358.5q0 135 68 250t183.5 181.5t250.5 66.5q184 0 349 -148l-105 -106q-114 104 -243 104q-149 0 -251.5 -104t-102.5 -254q0 -140 105.5 -241t247.5 -101q131 0 244 103zM912 565l276 -266l-276 -264 v177h-413v176h413v177z" />
|
|
67
|
+
<glyph unicode="Z" horiz-adv-x="1217" d="M870 300q0 27 -19.5 46t-46.5 19h-391q-27 0 -46 -19t-19 -46t19 -46t46 -19h391q27 0 46.5 19t19.5 46zM1174 452v-609q0 -17 -13 -30t-31 -13h-1043q-18 0 -31 13t-13 30v609q0 18 13 31t31 13h1043q18 0 31 -13t13 -31zM1217 757v-131q0 -18 -12.5 -30.5t-30.5 -12.5 h-1131q-17 0 -30 12.5t-13 30.5v131q0 17 13 30t30 13h1131q18 0 30.5 -13t12.5 -30z" />
|
|
68
|
+
<glyph unicode="[" horiz-adv-x="529" d="M265 35l-265 530h529z" />
|
|
69
|
+
<glyph unicode="\" d="M726 -9l-535 535q-74 -100 -74 -226q0 -158 112.5 -270.5t270.5 -112.5q126 0 226 74zM883 300q0 158 -112.5 270.5t-270.5 112.5q-126 0 -226 -74l535 -535q74 100 74 226zM1000 300q0 -136 -67 -251t-182 -182t-251 -67t-251 67t-182 182t-67 251t67 251t182 182 t251 67t251 -67t182 -182t67 -251z" />
|
|
70
|
+
<glyph unicode="]" horiz-adv-x="529" d="M529 300l-529 -265v530z" />
|
|
71
|
+
<glyph unicode="_" horiz-adv-x="1360" d="M160 277l317 135v96l-317 134v-99l209 -84l-209 -83v-99zM522 200h318v77h-318v-77zM1360 800v-1000h-1360v1000h1360z" />
|
|
72
|
+
<glyph unicode="`" d="M848 241h-142v118h142q-19 110 -99 190t-190 99v-142h-118v142q-110 -19 -190 -99t-99 -190h142v-118h-142q19 -110 99 -190t190 -99v142h118v-142q110 19 190 99t99 190zM1000 300q0 -136 -67 -251t-182 -182t-251 -67t-251 67t-182 182t-67 251t67 251t182 182t251 67 t251 -67t182 -182t67 -251z" />
|
|
73
|
+
<glyph unicode="a" horiz-adv-x="760" d="M160 -40h440v560h-120v120h-320v-680zM560 800l200 -200l-1 -800h-759v1000h560z" />
|
|
74
|
+
<glyph unicode="b" horiz-adv-x="989" d="M158 108h671v316h-118v118h-553v-434zM987 503v-553h-987v750h789z" />
|
|
75
|
+
<glyph unicode="c" horiz-adv-x="1137" d="M1137 700v-532q0 -41 -29.5 -70.5t-70.5 -29.5h-168v-268l-267 268h-502q-41 0 -70.5 29.5t-29.5 70.5v532q0 41 29.5 70.5t70.5 29.5h937q41 0 70.5 -29.5t29.5 -70.5z" />
|
|
76
|
+
<glyph unicode="d" horiz-adv-x="1179" d="M1179 336q0 -126 -79 -233.5t-215 -169.5t-296 -62q-122 0 -234 39l2 -3l-357 -107q44 59 70.5 126.5t31.5 105.5l4 38q-106 120 -106 266q0 126 79 233t214.5 169t295.5 62t296 -62t215 -169t79 -233z" />
|
|
77
|
+
<glyph unicode="e" horiz-adv-x="1179" d="M429 336q0 29 -21 50t-51 21q-29 0 -50 -21t-21 -50q0 -30 21 -51t50 -21q30 0 51 21t21 51zM679 336q0 29 -21 50t-51 21q-29 0 -50 -21t-21 -50q0 -30 21 -51t50 -21q30 0 51 21t21 51zM929 336q0 29 -21 50t-51 21q-29 0 -50 -21t-21 -50q0 -30 21 -51t50 -21 q30 0 51 21t21 51zM1179 336q0 -126 -79 -233.5t-215 -169.5t-296 -62q-122 0 -234 39l2 -3l-357 -107q44 59 70.5 126.5t31.5 105.5l4 38q-106 120 -106 266q0 126 79 233t214.5 169t295.5 62t296 -62t215 -169t79 -233z" />
|
|
78
|
+
<glyph unicode="f" d="M813 552l20 118q-43 15 -143 15q-79 0 -123 -58q-26 -34 -26 -119v-6v-36v-36h-79v-115h79v-400h149v400h118l9 115h-127v36v42v12q0 42 59 42q31 0 64 -10zM1000 712v-824q0 -36 -26 -62t-62 -26h-824q-36 0 -62 26t-26 62v824q0 36 26 62t62 26h824q36 0 62 -26t26 -62 z" />
|
|
79
|
+
<glyph unicode="g" d="M468 121q0 -44 -43 -71t-90 -27t-85.5 24t-38.5 68q0 48 41 72t92 24q46 0 85 -23.5t39 -66.5zM413 466q0 -35 -15.5 -60t-48.5 -25q-43 0 -68.5 45.5t-25.5 91.5q0 35 15.5 60t48.5 25q43 0 68.5 -45.5t25.5 -91.5zM548 636q0 11 -22 11q-3 0 -52 0.5t-72.5 0t-60.5 -4 t-59 -10.5q-58 -19 -92.5 -62t-34.5 -102q0 -70 44 -113t114 -42h6q0 -24 2 -35t5 -11.5t7.5 -5t8.5 -14.5q-55 0 -102.5 -12t-85.5 -48t-38 -91q0 -77 61.5 -114.5t143.5 -37.5q92 0 159.5 45.5t67.5 133.5q0 38 -19.5 73t-43.5 55t-43.5 38.5t-19.5 28.5q0 11 15 25.5 t33.5 29t33.5 46.5t15 74q0 76 -44 107q1 0 15.5 1.5t20.5 3t17 5t15.5 10t4.5 15.5zM763 473h121v60h-121v122h-60v-122h-122v-60h122v-121h60v121zM1000 712v-824q0 -36 -26 -62t-62 -26h-824q-36 0 -62 26t-26 62v824q0 36 26 62t62 26h824q36 0 62 -26t26 -62z" />
|
|
80
|
+
<glyph unicode="h" horiz-adv-x="1185" d="M501 801v-319q110 -15 203.5 -45t159 -68t118.5 -82.5t86 -90.5t57 -90.5t35 -83.5t17.5 -69t6.5 -47l1 -17q-6 11 -19 29.5t-67.5 63t-124.5 76.5t-196.5 52t-276.5 7v-316l-501 499z" />
|
|
81
|
+
<glyph unicode="i" horiz-adv-x="1550" d="M866 801v-319q110 -15 203.5 -45t159 -68t118.5 -82.5t86 -90.5t57 -90.5t35 -83.5t17.5 -69t7.5 -47v-17q-6 11 -19 29.5t-67.5 63t-124.5 76.5t-196.5 52t-276.5 7v-316l-501 499zM501 801v-182l-319 -319l319 -318v-181l-501 499z" />
|
|
82
|
+
<glyph unicode="j" horiz-adv-x="1185" d="M0 482h684v319l501 -501l-501 -499v316h-684v365z" />
|
|
83
|
+
<glyph unicode="k" d="M544 348h183l-1 119h-184l2 181h-112q-3 -68 -37 -118q-3 -5 -9 -16t-11.5 -19t-10.5 -12q-19 -15 -76 -15h-15v-120l91 -3v-303q0 -39 14.5 -65t41 -37.5t50 -15t55.5 -3.5h45q50 0 81 3.5t42.5 7.5t26.5 12v128v0q-54 -35 -105 -35q-27 0 -49 13t-22 25v273zM1000 712 v-824q0 -36 -26 -62t-62 -26h-824q-36 0 -62 26t-26 62v824q0 36 26 62t62 26h824q36 0 62 -26t26 -62z" />
|
|
84
|
+
<glyph unicode="l" d="M200 0h128v419h-128v-419zM332 535q0 28 -18.5 46.5t-48.5 18.5t-49 -18.5t-19 -46.5t18.5 -46.5t47.5 -18.5q32 0 51 18.5t18 46.5zM668 0h129v247q0 89 -41 135t-107 46q-47 0 -79.5 -21t-48.5 -47h-2l-6 59h-111q3 -114 3 -134v-285h128v241q0 21 4 33q20 49 66 49 q65 0 65 -91v-232zM1000 712v-824q0 -36 -26 -62t-62 -26h-824q-36 0 -62 26t-26 62v824q0 36 26 62t62 26h824q36 0 62 -26t26 -62z" />
|
|
85
|
+
<glyph unicode="m" d="M880 547q0 93 -112 93q-74 0 -139 -53t-89 -126q20 3 38 1t32 -7t22 -19.5t8 -38.5q0 -43 -38 -119t-75 -76q-19 0 -36 19q-24 25 -38 94.5t-20 134.5t-31 117t-70 52q-37 0 -80 -26t-104.5 -80.5t-67.5 -58.5v-5q5 -5 10.5 -14.5t12 -14t18.5 -4.5q11 0 33 7t34 7 q26 0 43 -40q5 -13 12.5 -37.5t10.5 -32.5q14 -40 37 -130l6.5 -26l8 -32t9.5 -32.5t12.5 -35t14 -31.5t17.5 -29.5t20.5 -22t25 -16.5t28.5 -5q67 0 145 65t138.5 156t105 182.5t55.5 149.5q3 18 3 34zM1000 712v-824q0 -36 -26 -62t-62 -26h-824q-36 0 -62 26t-26 62v824 q0 36 26 62t62 26h824q36 0 62 -26t26 -62z" />
|
|
86
|
+
<glyph unicode="n" d="M89 349l150 -107l-150 -106v213zM1000 14v-213h-669v213h669zM1000 349v-213h-669v213h669zM1000 683v-213h-669v213h669z" />
|
|
87
|
+
<glyph unicode="o" d="M239 349v-213l-150 106zM1000 14v-213h-669v213h669zM1000 349v-213h-669v213h669zM1000 683v-213h-669v213h669z" />
|
|
88
|
+
<glyph unicode="p" d="M239 -93q0 -31 -22.5 -53.5t-53.5 -22.5t-53.5 22.5t-22.5 53.5q0 32 22.5 54.5t53.5 22.5t53.5 -22.5t22.5 -54.5zM239 242q0 -32 -22.5 -54t-53.5 -22t-53.5 22t-22.5 54t22.5 54t53.5 22t53.5 -22t22.5 -54zM1000 14v-213h-669v213h669zM239 577q0 -31 -22.5 -53.5 t-53.5 -22.5t-53.5 22.5t-22.5 53.5t22.5 53.5t53.5 22.5t53.5 -22.5t22.5 -53.5zM1000 349v-213h-669v213h669zM1000 683v-213h-669v213h669z" />
|
|
89
|
+
<glyph unicode="q" d="M233 -128q0 -29 -21 -45.5t-50 -16.5q-32 0 -51.5 17.5t-19.5 48.5v3h38q0 -37 32 -37q14 0 23 8t9 22t-10 21.5t-25 6.5h-9v27q40 -2 40 24q0 11 -7.5 17.5t-19.5 6.5q-29 0 -29 -33h-37q1 30 18.5 47t47.5 17q26 0 45 -13.5t19 -38.5q0 -13 -7.5 -24t-19.5 -14 q34 -8 34 -44zM232 175v-33h-141q1 28 17 48.5t34.5 30t34 23.5t15.5 30q0 12 -7.5 19.5t-20.5 7.5q-29 0 -31 -41h-37q0 34 18 54.5t52 20.5q28 0 46.5 -16t18.5 -43q0 -25 -16.5 -41t-40 -30.5t-33.5 -29.5h91zM1000 14v-213h-669v213h669zM196 662v-192h-42v125h-46v29 q49 0 56 38h32zM1000 349v-213h-669v213h669zM1000 683v-213h-669v213h669z" />
|
|
90
|
+
<glyph unicode="r" d="M324 35q0 37 -26 63t-63 26q-36 0 -62 -26t-26 -63q0 -36 26 -62t62 -26q37 0 63 26t26 62zM477 -53h136q0 126 -62.5 233.5t-170 170t-233.5 62.5v-135q136 0 233 -97q97 -95 97 -234zM717 -53h136q0 143 -56 274t-150.5 225.5t-225.5 150.5t-274 56v-135 q154 0 285.5 -76.5t208 -208t76.5 -286.5zM1000 712v-824q0 -36 -26 -62t-62 -26h-824q-36 0 -62 26t-26 62v824q0 36 26 62t62 26h824q36 0 62 -26t26 -62z" />
|
|
91
|
+
<glyph unicode="s" d="M783 175q0 50 -22 86.5t-57.5 56.5t-78.5 34t-86 22.5t-78.5 18t-57.5 25.5t-22 39q0 34 36.5 49.5t75.5 15.5q40 0 66.5 -12.5t38.5 -30t21.5 -35t25 -30t40.5 -12.5q28 0 48.5 19t20.5 46t-15 54q-30 55 -96.5 80t-140.5 25q-46 0 -89.5 -9t-84.5 -28.5t-66 -56.5 t-25 -87q0 -66 40.5 -106.5t99 -57t116.5 -28.5t98.5 -33.5t40.5 -58.5q0 -42 -42 -62.5t-90 -20.5q-45 0 -74 15t-41.5 36t-22.5 42.5t-26 36.5t-42 15q-28 0 -49 -17.5t-21 -44.5q0 -42 31 -85q72 -104 249 -104q50 0 97 11t89 33.5t67.5 63.5t25.5 95zM1000 73 q0 -113 -81.5 -193t-195.5 -80q-69 0 -130 32q-46 -8 -88 -8q-196 0 -336.5 137.5t-140.5 333.5q0 42 10 94q-38 64 -38 138q0 113 81.5 193t195.5 80q81 0 147 -42q38 7 81 7q129 0 238.5 -62.5t174 -170.5t64.5 -237q0 -56 -11 -101q29 -58 29 -121z" />
|
|
92
|
+
<glyph unicode="t" horiz-adv-x="1003" d="M1003 300q-43 -48 -120 -46q-37 -152 -177.5 -244t-304.5 -92q-121 0 -225.5 53t-175.5 151q75 -72 181 -72q113 0 191 83q-24 -4 -48 7.5t-24 34.5q0 27 41 45q-40 -5 -73 11t-51 51q22 25 69 28q-98 24 -112 102q27 8 53 8h8q-37 20 -62 51.5t-24 69.5l1 8 q155 -59 257 -116q30 -17 76 -63q32 87 67.5 150.5t89.5 98.5q-1 -16 -15 -31q33 32 78 38q-3 -23 -53 -41q7 2 25.5 9.5t33 11.5t25.5 4q15 0 15 -11q0 -8 -16.5 -16t-42.5 -15.5t-28 -8.5q81 8 141.5 -51.5t76.5 -142.5q18 -6 36 -6q50 0 83 19q-13 -30 -43.5 -47 t-66.5 -19q34 -15 83 -15q16 0 31 3z" />
|
|
93
|
+
<glyph unicode="u" horiz-adv-x="963" d="M741 -199v1000h222v-1000h-222zM593 -199h-223v667h223v-667zM222 -199h-222v333h222v-333z" />
|
|
94
|
+
<glyph unicode="v" d="M605 187q0 -12 -3 -22.5t-7 -18t-12.5 -13.5t-14.5 -10t-18 -6.5t-18.5 -4t-21 -2t-20 -0.5h-20.5h-18h-22v150h51h25.5t23 -1t24.5 -3.5t19 -8t18 -13t9.5 -19.5t4.5 -28zM567 430q0 -20 -7 -33t-15.5 -20t-26 -10t-27.5 -3.5t-31 -0.5h-30v127h39q18 0 27.5 -0.5 t25.5 -3.5t24 -9t14.5 -18t6.5 -29zM760 184q0 58 -32 95.5t-91 49.5v3q39 16 61 51t22 78q0 46 -19.5 75.5t-55.5 42.5t-68.5 17t-77.5 4h-219v-600h240q47 0 88 9.5t76 29.5t55.5 57.5t20.5 87.5zM1000 712v-824q0 -36 -26 -62t-62 -26h-824q-36 0 -62 26t-26 62v824 q0 36 26 62t62 26h824q36 0 62 -26t26 -62z" />
|
|
95
|
+
<glyph unicode="w" horiz-adv-x="582" d="M582 388v-356q0 -32 -32 -32h-518q-32 0 -32 32v356q0 33 32 33h389v194q0 51 -37 74t-91 23q-53 0 -92 -25.5t-39 -76.5v-125h-97v128h1q9 87 74 140.5t153 53.5t151 -63t71 -151h1l2 -172q4 0 14.5 0.5t15 0t13 -2t12 -5t6.5 -10t3 -16.5z" />
|
|
96
|
+
<glyph unicode="x" horiz-adv-x="582" d="M421 550q0 51 -37 74t-91 23q-53 0 -92 -25.5t-39 -76.5v-124h259v129zM582 388v-356q0 -32 -32 -32h-518q-32 0 -32 32v356q0 10 3 16.5t7 10t12 5t13 2t15.5 0t14.5 -0.5v127h1q9 87 74 140.5t153 53.5t151 -62.5t71 -151.5h1l2 -107q4 0 14.5 0.5t15 0t13 -2t12 -5 t6.5 -10t3 -16.5z" />
|
|
97
|
+
<glyph unicode="y" d="M611 90v-133q0 -21 -18 -21q-14 0 -25 11v158q10 10 22 10q21 0 21 -25zM802 87v-28h-45v28q0 27 23 27q22 0 22 -27zM258 192h61v50h-179v-50h60v-293h58v293zM414 -101h51v253h-51v-192q-17 -19 -31 -19q-13 0 -13 17v194h-52v-213q0 -44 36 -44q30 0 60 32v-28z M664 -48v140q0 63 -50 63q-25 0 -46 -23v110h-52v-343h52v20q22 -23 49 -23q47 0 47 56zM855 -29v19h-53q0 -2 0.5 -13t0 -15.5t-2.5 -11.5t-7 -10t-14 -3q-10 0 -15.5 6t-6 12t-0.5 17v48h98v64q0 35 -19 55t-54 20q-34 0 -56.5 -20.5t-22.5 -54.5v-113q0 -36 19.5 -57.5 t55.5 -21.5q77 0 77 79zM926 62q0 -49 -6 -145q-4 -50 -38.5 -79.5t-84.5 -31.5q-99 -5 -297 -5q-199 0 -297 5q-50 2 -84.5 31.5t-38.5 79.5q-6 96 -6 145t6 145q4 50 38.5 79.5t84.5 31.5q98 5 297 5t297 -5q50 -2 84.5 -31.5t38.5 -79.5q6 -96 6 -145zM315 801h73 l-55 -165q-4 -12 -10 -27.5t-10.5 -28t-7.5 -27.5v-176h-72v168q-2 12 -29 85l-57 171h73l46 -169h5zM505 450v171q0 10 -9 16.5t-19 6.5t-18 -6.5t-8 -16.5v-171q0 -26 26 -26q28 0 28 26zM570 617v-162q0 -42 -25 -64t-68 -22q-41 0 -66.5 23.5t-25.5 63.5v162 q0 39 27.5 59.5t67.5 20.5q38 0 64 -22t26 -59zM807 690v-313h-64v35q-37 -39 -74 -39q-45 0 -45 56v261h64v-240q0 -21 17 -21t38 24v237h64z" />
|
|
98
|
+
<glyph unicode="z" d="M1000 235v-9l-426 -426h-565l-9 9v565l426 426h9l139 -139zM574 384v277h-277l-10 -9v-555l10 -10h555l9 10v268l-9 9h-268z" />
|
|
99
|
+
<glyph unicode="{" horiz-adv-x="471" d="M235 182l-235 236h471z" />
|
|
100
|
+
<glyph unicode="}" horiz-adv-x="471" d="M471 182h-471l235 236z" />
|
|
101
|
+
<glyph unicode="~" d="M412 360h103l-162 265l-162 -265h103v-294h118v294zM647 7l162 236h-103v293h-118v-293h-103zM1000 301q0 -136 -67 -251t-182 -182t-251 -67t-251 67t-182 182t-67 251t67 251t182 182t251 67t251 -67t182 -182t67 -251z" />
|
|
102
|
+
<glyph unicode="²" d="M1000 -39v-160h-1000v160h1000zM1000 241v-160h-1000v160h1000zM1000 521v-160h-1000v160h1000zM1000 801v-160h-1000v160h1000z" />
|
|
103
|
+
<glyph unicode="³" d="M120 -79h200v200h-200v-200zM440 241v-440h-440v440h440zM1000 -39v-160h-440v160h440zM120 481h200v200h-200v-200zM440 801v-440h-440v440h440zM1000 241v-160h-440v160h440zM1000 521v-160h-440v160h440zM1000 801v-160h-440v160h440z" />
|
|
104
|
+
<glyph unicode="¹" d="M120 -79h200v200h-200v-200zM440 241v-440h-440v440h440zM680 -79h200v200h-200v-200zM1000 241v-440h-440v440h440zM120 481h200v200h-200v-200zM440 801v-440h-440v440h440zM680 481h200v200h-200v-200zM1000 801v-440h-440v440h440z" />
|
|
105
|
+
<glyph unicode="×" d="M661 68l71 71l-161 161l161 161l-71 71l-161 -161l-161 161l-71 -71l161 -161l-161 -161l71 -71l161 161zM1000 300q0 -136 -67 -251t-182 -182t-251 -67t-251 67t-182 182t-67 251t67 251t182 182t251 67t251 -67t182 -182t67 -251z" />
|
|
106
|
+
<glyph unicode="" horiz-adv-x="740" d="M0 740h740v-740h-740v740z" />
|
|
107
|
+
</font>
|
|
108
|
+
</defs></svg>
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
body { background-color: #fff; color: #333; }
|
|
2
|
+
|
|
3
|
+
body, p, ol, ul, td {
|
|
4
|
+
font-family: verdana, arial, helvetica, sans-serif;
|
|
5
|
+
font-size: 13px;
|
|
6
|
+
line-height: 18px;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
pre {
|
|
10
|
+
background-color: #eee;
|
|
11
|
+
padding: 10px;
|
|
12
|
+
font-size: 11px;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
a { color: #000; }
|
|
16
|
+
a:visited { color: #666; }
|
|
17
|
+
a:hover { color: #fff; background-color:#000; }
|
|
18
|
+
|
|
19
|
+
div.field, div.actions {
|
|
20
|
+
margin-bottom: 10px;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
#notice {
|
|
24
|
+
color: green;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.field_with_errors {
|
|
28
|
+
padding: 2px;
|
|
29
|
+
background-color: red;
|
|
30
|
+
display: table;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
#error_explanation {
|
|
34
|
+
width: 450px;
|
|
35
|
+
border: 2px solid red;
|
|
36
|
+
padding: 7px;
|
|
37
|
+
padding-bottom: 0;
|
|
38
|
+
margin-bottom: 20px;
|
|
39
|
+
background-color: #f0f0f0;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
#error_explanation h2 {
|
|
43
|
+
text-align: left;
|
|
44
|
+
font-weight: bold;
|
|
45
|
+
padding: 5px 5px 5px 15px;
|
|
46
|
+
font-size: 12px;
|
|
47
|
+
margin: -7px;
|
|
48
|
+
margin-bottom: 0px;
|
|
49
|
+
background-color: #c00;
|
|
50
|
+
color: #fff;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
#error_explanation ul li {
|
|
54
|
+
font-size: 12px;
|
|
55
|
+
list-style: square;
|
|
56
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
require_dependency "myreplicator/application_controller"
|
|
2
|
+
|
|
3
|
+
module Myreplicator
|
|
4
|
+
|
|
5
|
+
class ExportsController < ApplicationController
|
|
6
|
+
before_filter :tab
|
|
7
|
+
helper_method :sort_column, :sort_direction
|
|
8
|
+
# GET /exports
|
|
9
|
+
# GET /exports.json
|
|
10
|
+
def index
|
|
11
|
+
@exports = Export.paginate(:page => params[:page]).order(sort_column + " " + sort_direction)
|
|
12
|
+
|
|
13
|
+
respond_to do |format|
|
|
14
|
+
format.html # index.html.erb
|
|
15
|
+
format.json { render json: @exports }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# GET /exports/1
|
|
20
|
+
# GET /exports/1.json
|
|
21
|
+
def show
|
|
22
|
+
@export = Export.find(params[:id])
|
|
23
|
+
|
|
24
|
+
respond_to do |format|
|
|
25
|
+
format.html # show.html.erb
|
|
26
|
+
format.json { render json: @export }
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# GET /exports/new
|
|
31
|
+
# GET /exports/new.json
|
|
32
|
+
def new
|
|
33
|
+
@export = Export.new
|
|
34
|
+
|
|
35
|
+
respond_to do |format|
|
|
36
|
+
format.html # new.html.erb
|
|
37
|
+
format.json { render json: @export }
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# GET /exports/1/edit
|
|
42
|
+
def edit
|
|
43
|
+
@export = Export.find(params[:id])
|
|
44
|
+
@edit = true
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# POST /exports
|
|
48
|
+
# POST /exports.json
|
|
49
|
+
def create
|
|
50
|
+
@export = Export.new(params[:export])
|
|
51
|
+
|
|
52
|
+
respond_to do |format|
|
|
53
|
+
if @export.save
|
|
54
|
+
format.html { redirect_to @export, notice: 'Export was successfully created.' }
|
|
55
|
+
format.json { render json: @export, status: :created, location: @export }
|
|
56
|
+
else
|
|
57
|
+
format.html { render action: "new" }
|
|
58
|
+
format.json { render json: @export.errors, status: :unprocessable_entity }
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# PUT /exports/1
|
|
64
|
+
# PUT /exports/1.json
|
|
65
|
+
def update
|
|
66
|
+
@export = Export.find(params[:id])
|
|
67
|
+
|
|
68
|
+
respond_to do |format|
|
|
69
|
+
if @export.update_attributes(params[:export])
|
|
70
|
+
format.html { redirect_to @export, notice: 'Export was successfully updated.' }
|
|
71
|
+
format.json { head :no_content }
|
|
72
|
+
else
|
|
73
|
+
format.html { render action: "edit" }
|
|
74
|
+
format.json { render json: @export.errors, status: :unprocessable_entity }
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# DELETE /exports/1
|
|
80
|
+
# DELETE /exports/1.json
|
|
81
|
+
def destroy
|
|
82
|
+
@export = Export.find(params[:id])
|
|
83
|
+
@export.destroy
|
|
84
|
+
|
|
85
|
+
respond_to do |format|
|
|
86
|
+
format.html { redirect_to exports_url }
|
|
87
|
+
format.json { head :no_content }
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
private
|
|
92
|
+
|
|
93
|
+
def tab
|
|
94
|
+
@tab = "exports"
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def sort_column
|
|
98
|
+
Export.column_names.include?(params[:sort]) ? params[:sort] : "source_schema"
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def sort_direction
|
|
102
|
+
%w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require_dependency "myreplicator/application_controller"
|
|
2
|
+
|
|
3
|
+
module Myreplicator
|
|
4
|
+
|
|
5
|
+
class HomeController < ApplicationController
|
|
6
|
+
def index
|
|
7
|
+
@tab = 'home'
|
|
8
|
+
@option = 'overview'
|
|
9
|
+
@exports = Export.order('state DESC')
|
|
10
|
+
respond_to do |format|
|
|
11
|
+
format.html # index.html.erb
|
|
12
|
+
format.json { render json: @exports }
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def errors
|
|
17
|
+
@tab = 'home'
|
|
18
|
+
@option = 'errors'
|
|
19
|
+
@exports = Export.where("error is not null").order('source_schema ASC')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Myreplicator
|
|
2
|
+
module ApplicationHelper
|
|
3
|
+
|
|
4
|
+
def sortable(column, title = nil)
|
|
5
|
+
title ||= column.titleize
|
|
6
|
+
css_class = column == sort_column ? "current #{sort_direction}" : nil
|
|
7
|
+
direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
|
|
8
|
+
link_to content_tag(:span, title), {:sort => column, :direction => direction}, {:class => css_class}
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
require 'exporter'
|
|
2
|
+
|
|
3
|
+
module Myreplicator
|
|
4
|
+
class Export < ActiveRecord::Base
|
|
5
|
+
attr_accessible(:source_schema,
|
|
6
|
+
:destination_schema,
|
|
7
|
+
:table_name,
|
|
8
|
+
:incremental_column,
|
|
9
|
+
:incremental_column_type,
|
|
10
|
+
:max_incremental_value,
|
|
11
|
+
:export_to,
|
|
12
|
+
:export_type,
|
|
13
|
+
:s3_path,
|
|
14
|
+
:cron,
|
|
15
|
+
:last_run,
|
|
16
|
+
:state,
|
|
17
|
+
:error,
|
|
18
|
+
:active,
|
|
19
|
+
:export_started_at,
|
|
20
|
+
:export_finished_at,
|
|
21
|
+
:load_started_at,
|
|
22
|
+
:load_finished_at,
|
|
23
|
+
:transfer_started_at,
|
|
24
|
+
:transfer_finished_at,
|
|
25
|
+
:exporter_pid,
|
|
26
|
+
:transporter_pid,
|
|
27
|
+
:loader_pid
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
attr_reader :filename
|
|
31
|
+
|
|
32
|
+
def export
|
|
33
|
+
exporter = MysqlExporter.new
|
|
34
|
+
exporter.export_table self
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def filename
|
|
38
|
+
@file_name ||= "#{source_schema}_#{table_name}_#{Time.now.to_i}.tsv"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def max_value
|
|
42
|
+
sql = SqlCommands.max_value_sql(:incremental_col => self.incremental_column,
|
|
43
|
+
:db => self.source_schema,
|
|
44
|
+
:table => self.table_name)
|
|
45
|
+
result = exec_on_source(sql)
|
|
46
|
+
|
|
47
|
+
return result.first.first
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def update_max_val(max_val = nil)
|
|
51
|
+
if max_val.nil?
|
|
52
|
+
self.max_incremental_value = max_value
|
|
53
|
+
else
|
|
54
|
+
self.max_incremental_value = max_val
|
|
55
|
+
self.save!
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def exec_on_source sql
|
|
60
|
+
result = SourceDb.exec_sql(self.source_schema, sql)
|
|
61
|
+
return result
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def ssh_to_source
|
|
65
|
+
puts "Connecting SSH..."
|
|
66
|
+
return connection_factory(:ssh)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def sftp_to_source
|
|
70
|
+
puts "Connecting SFTP..."
|
|
71
|
+
return connection_factory(:sftp)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def connection_factory type
|
|
75
|
+
case type
|
|
76
|
+
when :ssh
|
|
77
|
+
if Myreplicator.configs[self.source_schema].has_key? "ssh_password"
|
|
78
|
+
return Net::SSH.start(Myreplicator.configs[self.source_schema]["ssh_host"],
|
|
79
|
+
Myreplicator.configs[self.source_schema]["ssh_user"],
|
|
80
|
+
:password => Myreplicator.configs[self.source_schema]["ssh_password"])
|
|
81
|
+
|
|
82
|
+
elsif(Myreplicator.configs[self.source_schema].has_key? "ssh_private_key")
|
|
83
|
+
return Net::SSH.start(Myreplicator.configs[self.source_schema]["ssh_host"],
|
|
84
|
+
Myreplicator.configs[self.source_schema]["ssh_user"],
|
|
85
|
+
:keys => [Myreplicator.configs[self.source_schema]["ssh_private_key"]])
|
|
86
|
+
end
|
|
87
|
+
when :sftp
|
|
88
|
+
if Myreplicator.configs[self.source_schema].has_key? "ssh_password"
|
|
89
|
+
return Net::SFTP.start(Myreplicator.configs[self.source_schema]["ssh_host"],
|
|
90
|
+
Myreplicator.configs[self.source_schema]["ssh_user"],
|
|
91
|
+
:password => Myreplicator.configs[self.source_schema]["ssh_password"])
|
|
92
|
+
|
|
93
|
+
elsif(Myreplicator.configs[self.source_schema].has_key? "ssh_private_key")
|
|
94
|
+
return Net::SFTP.start(Myreplicator.configs[self.source_schema]["ssh_host"],
|
|
95
|
+
Myreplicator.configs[self.source_schema]["ssh_user"],
|
|
96
|
+
:keys => [Myreplicator.configs[self.source_schema]["ssh_private_key"]])
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
##
|
|
102
|
+
# Inner Class that connects to the source database
|
|
103
|
+
# Handles connecting to multiple databases
|
|
104
|
+
##
|
|
105
|
+
|
|
106
|
+
class SourceDb < ActiveRecord::Base
|
|
107
|
+
|
|
108
|
+
def self.connect db
|
|
109
|
+
@@connected ||= true
|
|
110
|
+
establish_connection(ActiveRecord::Base.configurations[db])
|
|
111
|
+
Kernel.p ActiveRecord::Base.connected?
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def self.exec_sql source_db,sql
|
|
115
|
+
SourceDb.connect(source_db)
|
|
116
|
+
return SourceDb.connection.execute(sql)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end
|
|
121
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>My Replicator</title>
|
|
5
|
+
<%= stylesheet_link_tag "myreplicator/application", :media => "all" %>
|
|
6
|
+
<%= javascript_include_tag "myreplicator/application" %>
|
|
7
|
+
<%= csrf_meta_tags %>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
|
|
11
|
+
<div id="header"><h1><a href="<%= root_path %>"><span>C</span>My Replicator</a></h1></div>
|
|
12
|
+
<div id="sub-header">
|
|
13
|
+
<a href="<%= root_path %>" <% if @tab == "home" %>class="active"<% end %>>home</a>
|
|
14
|
+
<a href="<%= exports_path %>" <% if @tab == "exports" %>class="active"<% end %>>exports</a>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<%= yield %>
|
|
18
|
+
<% flash.each do |name, msg| %>
|
|
19
|
+
<div class="flash">
|
|
20
|
+
<%= msg %>
|
|
21
|
+
</div>
|
|
22
|
+
<% end %>
|
|
23
|
+
</body>
|
|
24
|
+
</html>
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
<%
|
|
2
|
+
#rather than yaml arrays of the drop downs
|
|
3
|
+
export_to = ["destination_db","s3","both"]
|
|
4
|
+
export_type = ["incremental","fulldump"]
|
|
5
|
+
%>
|
|
6
|
+
|
|
7
|
+
<%= form_for(@export) do |f| %>
|
|
8
|
+
<% if @export.errors.any? %>
|
|
9
|
+
<div id="error_explanation">
|
|
10
|
+
<h2><%= pluralize(@export.errors.count, "error") %> prohibited this export from being saved:</h2>
|
|
11
|
+
|
|
12
|
+
<ul>
|
|
13
|
+
<% @export.errors.full_messages.each do |msg| %>
|
|
14
|
+
<li><%= msg %></li>
|
|
15
|
+
<% end %>
|
|
16
|
+
</ul>
|
|
17
|
+
</div>
|
|
18
|
+
<% end %>
|
|
19
|
+
<div class="form-section">
|
|
20
|
+
<label>Source Schema</label>
|
|
21
|
+
<%= f.text_field :source_schema %>
|
|
22
|
+
<label>Destination Schema</label>
|
|
23
|
+
<%= f.text_field :destination_schema %>
|
|
24
|
+
<label>Table Name</label>
|
|
25
|
+
<%= f.text_field :table_name %>
|
|
26
|
+
<label>Incremental Column</label>
|
|
27
|
+
<%= f.text_field :incremental_column %>
|
|
28
|
+
<label>Maximum Incremental Value</label>
|
|
29
|
+
<%= f.text_field :max_incremental_value %>
|
|
30
|
+
<label>S3 Path</label>
|
|
31
|
+
<%= f.text_field :s3_path %>
|
|
32
|
+
<label>Export to</label>
|
|
33
|
+
<select name="export[export_to]" id="export_to" class="chosen" data-placeholder="Select export destination">
|
|
34
|
+
<% export_to.each do |val| %>
|
|
35
|
+
<option value="<%= val %>" <% if @export.export_to == val %>SELECTED<% end %>><%= val %></option>
|
|
36
|
+
<% end %>
|
|
37
|
+
</select>
|
|
38
|
+
<label>Export type</label>
|
|
39
|
+
<select name="export[export_type]" id="export_type" class="chosen" data-placeholder="Select your export type">
|
|
40
|
+
<% export_type.each do |val| %>
|
|
41
|
+
<option value="<%= val %>" <% if @export.export_type == val %>SELECTED<% end %>><%= val %></option>
|
|
42
|
+
<% end %>
|
|
43
|
+
</select>
|
|
44
|
+
<label>Active</label>
|
|
45
|
+
<select name="export[active]" id="active" class="chosen">
|
|
46
|
+
<option value="true" <% if @export.active == true %>SELECTED<% end %>>true</option>
|
|
47
|
+
<option value="false" <% if @export.active == false %>SELECTED<% end %>>false</option>
|
|
48
|
+
</select>
|
|
49
|
+
</div>
|
|
50
|
+
<div class="form-section">
|
|
51
|
+
<%= f.hidden_field :cron %>
|
|
52
|
+
<label>Cron</label>
|
|
53
|
+
<span class="cron-label">minutes:</span><select id="min" class="cron" multiple data-placeholder="Minutes">
|
|
54
|
+
<option value="*">*</option>
|
|
55
|
+
<% (0..59).each do |n| %>
|
|
56
|
+
<option value="<%=n %>"><%= n%></option>
|
|
57
|
+
<% end %>
|
|
58
|
+
</select><br/>
|
|
59
|
+
<span class="cron-label">hours:</span><select id="hour" class="cron" multiple data-placeholder="Hours">
|
|
60
|
+
<option value="*">*</option>
|
|
61
|
+
<% (0..23).each do |n| %>
|
|
62
|
+
<option value="<%=n %>"><%= n%></option>
|
|
63
|
+
<% end %>
|
|
64
|
+
</select><br/>
|
|
65
|
+
<span class="cron-label">days:</span><select id="day" class="cron" multiple data-placeholder="Days">
|
|
66
|
+
<option value="*">*</option>
|
|
67
|
+
<% (1..31).each do |n| %>
|
|
68
|
+
<option value="<%=n %>"><%= n%></option>
|
|
69
|
+
<% end %>
|
|
70
|
+
</select><br/>
|
|
71
|
+
<span class="cron-label">months:</span><select id="month" class="cron" multiple data-placeholder="Months">
|
|
72
|
+
<option value="*">*</option>
|
|
73
|
+
<% (1..12).each do |n| %>
|
|
74
|
+
<option value="<%= n - 1%>"><%= Date::MONTHNAMES[n]%></option>
|
|
75
|
+
<% end %>
|
|
76
|
+
</select><br/>
|
|
77
|
+
<span class="cron-label">weekday:</span><select id="dow" class="cron" multiple data-placeholder="Day of the Week">
|
|
78
|
+
<option value="*">*</option>
|
|
79
|
+
<% (0..6).each do |n| %>
|
|
80
|
+
<option value="<%=n %>"><%= Date::DAYNAMES[n]%></option>
|
|
81
|
+
<% end %>
|
|
82
|
+
</select>
|
|
83
|
+
<label style="clear:left">Cron synatx</label>
|
|
84
|
+
<div id="cron-val"></div>
|
|
85
|
+
<label>Cron translation</label>
|
|
86
|
+
<div id="cronwtf"></div>
|
|
87
|
+
</div>
|
|
88
|
+
<div class="actions">
|
|
89
|
+
<%= f.submit %>
|
|
90
|
+
<%= link_to content_tag(:span, 'cancel'), exports_path, :class => "btn left action cancel" %>
|
|
91
|
+
</div>
|
|
92
|
+
<% end %>
|
|
93
|
+
<%= javascript_include_tag "myreplicator/chosen.jquery.min" %>
|
|
94
|
+
<%= javascript_include_tag "myreplicator/cronwtf.min" %>
|
|
95
|
+
<script>
|
|
96
|
+
$(function(){
|
|
97
|
+
CronUI.translate();
|
|
98
|
+
$(".chosen").chosen();
|
|
99
|
+
$(".cron").chosen().change(function(){CronUI.translate()});
|
|
100
|
+
|
|
101
|
+
<%- if @edit -%>
|
|
102
|
+
function editInit(){
|
|
103
|
+
var cron = "<%= @export.cron %>";
|
|
104
|
+
var displays = ["#min","#hour","#day","#month","#dow"];
|
|
105
|
+
var cron_vals = cron.split(" ");
|
|
106
|
+
for(i=0;i<cron_vals.length; i++){
|
|
107
|
+
//console.log(displays[i]+" val: "+cron_vals[i])
|
|
108
|
+
$(displays[i]).val(cron_vals[i]).trigger("liszt:updated");
|
|
109
|
+
}
|
|
110
|
+
CronUI.translate();
|
|
111
|
+
}
|
|
112
|
+
editInit();
|
|
113
|
+
<%- end -%>
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
})
|
|
117
|
+
</script>
|