From 2bbf81400388431032880faffc85bc35d77240bc Mon Sep 17 00:00:00 2001 From: despiegk Date: Sun, 9 Feb 2025 17:44:40 +0100 Subject: [PATCH] ... --- examples/installers/meilisearch.vsh | 6 + .../meilisearchinstaller_actions.v | 251 +++++------ .../meilisearchinstaller_actions0.v | 168 ++++++++ .../meilisearchinstaller_factory_.v | 398 +++++++++--------- .../meilisearchinstaller_factory_0.v | 281 +++++++++++++ .../meilisearchinstaller_model.v | 58 +-- 6 files changed, 814 insertions(+), 348 deletions(-) create mode 100755 examples/installers/meilisearch.vsh create mode 100644 lib/installers/db/meilisearchinstaller/meilisearchinstaller_actions0.v create mode 100644 lib/installers/db/meilisearchinstaller/meilisearchinstaller_factory_0.v diff --git a/examples/installers/meilisearch.vsh b/examples/installers/meilisearch.vsh new file mode 100755 index 00000000..4f563217 --- /dev/null +++ b/examples/installers/meilisearch.vsh @@ -0,0 +1,6 @@ +#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run + +import freeflowuniverse.herolib.installers.db.meilisearchinstaller + + +meilisearch := meilisearchinstaller.get()! \ No newline at end of file diff --git a/lib/installers/db/meilisearchinstaller/meilisearchinstaller_actions.v b/lib/installers/db/meilisearchinstaller/meilisearchinstaller_actions.v index 9e1acf63..4c5fd5ae 100644 --- a/lib/installers/db/meilisearchinstaller/meilisearchinstaller_actions.v +++ b/lib/installers/db/meilisearchinstaller/meilisearchinstaller_actions.v @@ -3,105 +3,16 @@ module meilisearchinstaller import freeflowuniverse.herolib.osal import freeflowuniverse.herolib.ui.console import freeflowuniverse.herolib.core.texttools +import freeflowuniverse.herolib.core.pathlib +import freeflowuniverse.herolib.osal.systemd import freeflowuniverse.herolib.osal.zinit import freeflowuniverse.herolib.installers.ulist -// import freeflowuniverse.herolib.installers.lang.rust +import freeflowuniverse.herolib.installers.lang.golang +import freeflowuniverse.herolib.installers.lang.rust +import freeflowuniverse.herolib.installers.lang.python +import freeflowuniverse.herolib.core.httpconnection import os -fn installed_() !bool { - res := os.execute('${osal.profile_path_source_and()!} meilisearch -V') - if res.exit_code != 0 { - return false - } - r := res.output.split_into_lines().filter(it.trim_space().len > 0) - if r.len != 1 { - return error("couldn't parse meilisearch version.\n${res.output}") - } - r2 := r[0].all_after('meilisearch').trim(' ') - if texttools.version(version) != texttools.version(r2) { - return false - } - return true -} - -fn install_() ! { - console.print_header('install meilisearch') - mut url := '' - - if core.is_linux_arm()! { - url = 'https://github.com/meilisearch/meilisearch/releases/download/v${version}/meilisearch-linux-aarch64' - } else if core.is_linux_intel()! { - url = 'https://github.com/meilisearch/meilisearch/releases/download/v${version}/meilisearch-linux-amd64' - } else if core.is_osx_arm()! { - url = 'https://github.com/meilisearch/meilisearch/releases/download/v${version}/meilisearch-macos-apple-silicon' - } else if core.is_osx_intel()! { - url = 'https://github.com/meilisearch/meilisearch/releases/download/v${version}/meilisearch-macos-amd64' - } else { - return error('unsported platform') - } - - mut dest := osal.download( - url: url - minsize_kb: 100000 - expand_dir: '/tmp/meilisearch' - )! - - // dest.moveup_single_subdir()! - - mut binpath := dest.file_get('meilisearch')! - osal.cmd_add( - cmdname: 'meilisearch' - source: binpath.path - )! -} - -fn build_() ! { - // mut installer := get()! - // url := 'https://github.com/threefoldtech/meilisearch' - - // console.print_header('compile meilisearch') - // rust.install()! - // mut dest_on_os := '${os.home_dir()}/hero/bin' - // if core.is_linux()! { - // dest_on_os = '/usr/local/bin' - // } - // console.print_debug(' - dest path for meilisearchs is on: ${dest_on_os}') - // //osal.package_install('pkg-config,openssl')! - // cmd := ' - // echo "start meilisearch installer" - // set +ex - // source ~/.cargo/env > /dev/null 2>&1 - - // //TODO - - // cargo install meilisearch - - // cp ${os.home_dir()}/.cargo/bin/mdb* ${dest_on_os}/ - // ' - // defer { - // destroy()! - // } - // osal.execute_stdout(cmd)! - // osal.done_set('install_meilisearch', 'OK')! - // console.print_header('meilisearch installed') -} - -// get the Upload List of the files -fn ulist_get() !ulist.UList { - // mut installer := get()! - // optionally build a UList which is all paths which are result of building, is then used e.g. in upload - return ulist.UList{} -} - -// uploads to S3 server if configured -fn upload_() ! { - // mut installer := get()! - // installers.upload( - // cmdname: 'meilisearch' - // source: '${gitpath}/target/x86_64-unknown-linux-musl/release/meilisearch' - // )! -} - fn startupcmd() ![]zinit.ZProcessNewArgs { mut res := []zinit.ZProcessNewArgs{} mut installer := get()! @@ -117,25 +28,20 @@ fn startupcmd() ![]zinit.ZProcessNewArgs { return res } -fn running_() !bool { - mut installer := get()! +fn running() !bool { + mut meilisearch := get()! // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED - // this checks health of meilisearch + // this checks health of meilisearchinstaller // curl http://localhost:3333/api/v1/s --oauth2-bearer 1234 works - // url:='http://127.0.0.1:${cfg.port}/api/v1' - // mut conn := httpconnection.new(name: 'meilisearch', url: url)! + url := 'http://${meilisearch.host}:${meilisearch.port}/api/v1' + mut conn := httpconnection.new(name: 'meilisearchinstaller', url: url)! + conn.default_header.add(.authorization, 'Bearer ${meilisearch.masterkey}') + conn.default_header.add(.content_type, 'application/json') - // if cfg.secret.len > 0 { - // conn.default_header.add(.authorization, 'Bearer ${cfg.secret}') - // } - // conn.default_header.add(.content_type, 'application/json') - // console.print_debug("curl -X 'GET' '${url}'/tags --oauth2-bearer ${cfg.secret}") - // r := conn.get_json_dict(prefix: 'tags', debug: false) or {return false} - // println(r) - // if true{panic("ssss")} - // tags := r['Tags'] or { return false } - // console.print_debug(tags) - // console.print_debug('meilisearch is answering.') + console.print_debug("curl -X 'GET' '${url}'/version") + response := conn.get_json_dict(prefix: 'version', debug: false) or { return false } + println('response: ${response}') + // if response return false } @@ -151,18 +57,127 @@ fn stop_pre() ! { fn stop_post() ! { } -fn destroy_() ! { +//////////////////// following actions are not specific to instance of the object + +// checks if a certain version or above is installed +fn installed() !bool { + // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED + // res := os.execute('${osal.profile_path_source_and()!} meilisearchinstaller version') + // if res.exit_code != 0 { + // return false + // } + // r := res.output.split_into_lines().filter(it.trim_space().len > 0) + // if r.len != 1 { + // return error("couldn't parse meilisearchinstaller version.\n${res.output}") + // } + // if texttools.version(version) == texttools.version(r[0]) { + // return true + // } + return false +} + +// get the Upload List of the files +fn ulist_get() !ulist.UList { + // optionally build a UList which is all paths which are result of building, is then used e.g. in upload + return ulist.UList{} +} + +// uploads to S3 server if configured +fn upload() ! { + // installers.upload( + // cmdname: 'meilisearchinstaller' + // source: '${gitpath}/target/x86_64-unknown-linux-musl/release/meilisearchinstaller' + // )! +} + +fn install() ! { + console.print_header('install meilisearchinstaller') + // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED + // mut url := '' + // if core.is_linux_arm() { + // url = 'https://github.com/meilisearchinstaller-dev/meilisearchinstaller/releases/download/v${version}/meilisearchinstaller_${version}_linux_arm64.tar.gz' + // } else if core.is_linux_intel() { + // url = 'https://github.com/meilisearchinstaller-dev/meilisearchinstaller/releases/download/v${version}/meilisearchinstaller_${version}_linux_amd64.tar.gz' + // } else if core.is_osx_arm() { + // url = 'https://github.com/meilisearchinstaller-dev/meilisearchinstaller/releases/download/v${version}/meilisearchinstaller_${version}_darwin_arm64.tar.gz' + // } else if osal.is_osx_intel() { + // url = 'https://github.com/meilisearchinstaller-dev/meilisearchinstaller/releases/download/v${version}/meilisearchinstaller_${version}_darwin_amd64.tar.gz' + // } else { + // return error('unsported platform') + // } + + // mut dest := osal.download( + // url: url + // minsize_kb: 9000 + // expand_dir: '/tmp/meilisearchinstaller' + // )! + + // //dest.moveup_single_subdir()! + + // mut binpath := dest.file_get('meilisearchinstaller')! + // osal.cmd_add( + // cmdname: 'meilisearchinstaller' + // source: binpath.path + // )! +} + +fn build() ! { + // url := 'https://github.com/threefoldtech/meilisearchinstaller' + + // make sure we install base on the node + // if osal.platform() != .ubuntu { + // return error('only support ubuntu for now') + // } + // golang.install()! + + // console.print_header('build meilisearchinstaller') + + // gitpath := gittools.get_repo(coderoot: '/tmp/builder', url: url, reset: true, pull: true)! + + // cmd := ' + // cd ${gitpath} + // source ~/.cargo/env + // exit 1 #todo + // ' + // osal.execute_stdout(cmd)! + // + // //now copy to the default bin path + // mut binpath := dest.file_get('...')! + // adds it to path + // osal.cmd_add( + // cmdname: 'griddriver2' + // source: binpath.path + // )! +} + +fn destroy() ! { // mut systemdfactory := systemd.new()! - // systemdfactory.destroy("meilisearch")! + // systemdfactory.destroy("zinit")! - osal.process_kill_recursive(name: 'meilisearch')! + // osal.process_kill_recursive(name:'zinit')! + // osal.cmd_delete('zinit')! - osal.cmd_delete('meilisearch')! + // osal.package_remove(' + // podman + // conmon + // buildah + // skopeo + // runc + // ')! - osal.package_remove(' - meilisearch - ') or { println('') } + // //will remove all paths where go/bin is found + // osal.profile_path_add_remove(paths2delete:"go/bin")! // osal.rm(" + // podman + // conmon + // buildah + // skopeo + // runc + // /var/lib/containers + // /var/lib/podman + // /var/lib/buildah + // /tmp/podman + // /tmp/conmon // ")! } diff --git a/lib/installers/db/meilisearchinstaller/meilisearchinstaller_actions0.v b/lib/installers/db/meilisearchinstaller/meilisearchinstaller_actions0.v new file mode 100644 index 00000000..bd670e0b --- /dev/null +++ b/lib/installers/db/meilisearchinstaller/meilisearchinstaller_actions0.v @@ -0,0 +1,168 @@ +module meilisearchinstaller + +// import freeflowuniverse.herolib.osal +// import freeflowuniverse.herolib.ui.console +// import freeflowuniverse.herolib.core.texttools +// import freeflowuniverse.herolib.osal.zinit +// import freeflowuniverse.herolib.installers.ulist +// // import freeflowuniverse.herolib.installers.lang.rust +// import os + +// fn installed_() !bool { +// res := os.execute('${osal.profile_path_source_and()!} meilisearch -V') +// if res.exit_code != 0 { +// return false +// } +// r := res.output.split_into_lines().filter(it.trim_space().len > 0) +// if r.len != 1 { +// return error("couldn't parse meilisearch version.\n${res.output}") +// } +// r2 := r[0].all_after('meilisearch').trim(' ') +// if texttools.version(version) != texttools.version(r2) { +// return false +// } +// return true +// } + +// fn install_() ! { +// console.print_header('install meilisearch') +// mut url := '' + +// if core.is_linux_arm()! { +// url = 'https://github.com/meilisearch/meilisearch/releases/download/v${version}/meilisearch-linux-aarch64' +// } else if core.is_linux_intel()! { +// url = 'https://github.com/meilisearch/meilisearch/releases/download/v${version}/meilisearch-linux-amd64' +// } else if core.is_osx_arm()! { +// url = 'https://github.com/meilisearch/meilisearch/releases/download/v${version}/meilisearch-macos-apple-silicon' +// } else if core.is_osx_intel()! { +// url = 'https://github.com/meilisearch/meilisearch/releases/download/v${version}/meilisearch-macos-amd64' +// } else { +// return error('unsported platform') +// } + +// mut dest := osal.download( +// url: url +// minsize_kb: 100000 +// expand_dir: '/tmp/meilisearch' +// )! + +// // dest.moveup_single_subdir()! + +// mut binpath := dest.file_get('meilisearch')! +// osal.cmd_add( +// cmdname: 'meilisearch' +// source: binpath.path +// )! +// } + +// fn build_() ! { +// // mut installer := get()! +// // url := 'https://github.com/threefoldtech/meilisearch' + +// // console.print_header('compile meilisearch') +// // rust.install()! +// // mut dest_on_os := '${os.home_dir()}/hero/bin' +// // if core.is_linux()! { +// // dest_on_os = '/usr/local/bin' +// // } +// // console.print_debug(' - dest path for meilisearchs is on: ${dest_on_os}') +// // //osal.package_install('pkg-config,openssl')! +// // cmd := ' +// // echo "start meilisearch installer" +// // set +ex +// // source ~/.cargo/env > /dev/null 2>&1 + +// // //TODO + +// // cargo install meilisearch + +// // cp ${os.home_dir()}/.cargo/bin/mdb* ${dest_on_os}/ +// // ' +// // defer { +// // destroy()! +// // } +// // osal.execute_stdout(cmd)! +// // osal.done_set('install_meilisearch', 'OK')! +// // console.print_header('meilisearch installed') +// } + +// // get the Upload List of the files +// fn ulist_get() !ulist.UList { +// // mut installer := get()! +// // optionally build a UList which is all paths which are result of building, is then used e.g. in upload +// return ulist.UList{} +// } + +// // uploads to S3 server if configured +// fn upload_() ! { +// // mut installer := get()! +// // installers.upload( +// // cmdname: 'meilisearch' +// // source: '${gitpath}/target/x86_64-unknown-linux-musl/release/meilisearch' +// // )! +// } + +// fn startupcmd() ![]zinit.ZProcessNewArgs { +// mut res := []zinit.ZProcessNewArgs{} +// mut installer := get()! +// mut env := 'development' +// if installer.production { +// env = 'production' +// } +// res << zinit.ZProcessNewArgs{ +// name: 'meilisearch' +// cmd: 'meilisearch --no-analytics --http-addr ${installer.host}:${installer.port} --env ${env} --db-path ${installer.path} --master-key ${installer.masterkey}' +// } + +// return res +// } + +// fn running_() !bool { +// mut installer := get()! +// // THIS IS EXAMPLE CODEAND NEEDS TO BE CHANGED +// // this checks health of meilisearch +// // curl http://localhost:3333/api/v1/s --oauth2-bearer 1234 works +// // url:='http://127.0.0.1:${cfg.port}/api/v1' +// // mut conn := httpconnection.new(name: 'meilisearch', url: url)! + +// // if cfg.secret.len > 0 { +// // conn.default_header.add(.authorization, 'Bearer ${cfg.secret}') +// // } +// // conn.default_header.add(.content_type, 'application/json') +// // console.print_debug("curl -X 'GET' '${url}'/tags --oauth2-bearer ${cfg.secret}") +// // r := conn.get_json_dict(prefix: 'tags', debug: false) or {return false} +// // println(r) +// // if true{panic("ssss")} +// // tags := r['Tags'] or { return false } +// // console.print_debug(tags) +// // console.print_debug('meilisearch is answering.') +// return false +// } + +// fn start_pre() ! { +// } + +// fn start_post() ! { +// } + +// fn stop_pre() ! { +// } + +// fn stop_post() ! { +// } + +// fn destroy_() ! { +// // mut systemdfactory := systemd.new()! +// // systemdfactory.destroy("meilisearch")! + +// osal.process_kill_recursive(name: 'meilisearch')! + +// osal.cmd_delete('meilisearch')! + +// osal.package_remove(' +// meilisearch +// ') or { println('') } + +// // osal.rm(" +// // ")! +// } diff --git a/lib/installers/db/meilisearchinstaller/meilisearchinstaller_factory_.v b/lib/installers/db/meilisearchinstaller/meilisearchinstaller_factory_.v index b8ed533e..033a0729 100644 --- a/lib/installers/db/meilisearchinstaller/meilisearchinstaller_factory_.v +++ b/lib/installers/db/meilisearchinstaller/meilisearchinstaller_factory_.v @@ -3,279 +3,289 @@ module meilisearchinstaller import freeflowuniverse.herolib.core.base import freeflowuniverse.herolib.core.playbook import freeflowuniverse.herolib.ui.console -import freeflowuniverse.herolib.data.encoderhero +import freeflowuniverse.herolib.data.paramsparser + import freeflowuniverse.herolib.sysadmin.startupmanager import freeflowuniverse.herolib.osal.zinit import time __global ( - meilisearchinstaller_global map[string]&MeilisearchServer - meilisearchinstaller_default string + meilisearchinstaller_global map[string]&MeilisearchServer + meilisearchinstaller_default string ) /////////FACTORY @[params] -pub struct ArgsGet { +pub struct ArgsGet{ pub mut: - name string + name string } -fn args_get(args_ ArgsGet) ArgsGet { - mut model := args_ - if model.name == '' { - model.name = meilisearchinstaller_default - } - if model.name == '' { - model.name = 'default' - } - return model +fn args_get (args_ ArgsGet) ArgsGet { + mut args:=args_ + if args.name == ""{ + args.name = "default" + } + return args } -pub fn get(args_ ArgsGet) !&MeilisearchServer { - mut args := args_get(args_) - if args.name !in meilisearchinstaller_global { - if args.name == 'default' { - if !config_exists(args) { - if default { - mut context := base.context() or { panic('bug') } - context.hero_config_set('meilisearchinstaller', model.name, heroscript_default()!)! - } - } - load(args)! - } - } - return meilisearchinstaller_global[args.name] or { - println(meilisearchinstaller_global) - panic('could not get config for ${args.name} with name:${model.name}') - } +pub fn get(args_ ArgsGet) !&MeilisearchServer { + mut context:=base.context()! + mut args := args_get(args_) + mut obj := MeilisearchServer{} + if !(args.name in meilisearchinstaller_global) { + if ! exists(args)!{ + set(obj)! + }else{ + heroscript := context.hero_config_get("meilisearchinstaller",args.name)! + mut obj_:=heroscript_loads(heroscript)! + set_in_mem(obj_)! + } + } + return meilisearchinstaller_global[args.name] or { + println(meilisearchinstaller_global) + //bug if we get here because should be in globals + panic("could not get config for meilisearchinstaller with name, is bug:${args.name}") + } } -// set the model in mem and the config on the filesystem -pub fn set(o MeilisearchServer) ! { - mut o2 := obj_init(o)! - meilisearchinstaller_global[o.name] = &o2 - meilisearchinstaller_default = o.name +//register the config for the future +pub fn set(o MeilisearchServer)! { + set_in_mem(o)! + mut context := base.context()! + heroscript := heroscript_dumps(o)! + context.hero_config_set("meilisearchinstaller", o.name, heroscript)! } -// check we find the config on the filesystem -pub fn exists(args_ ArgsGet) bool { - mut model := args_get(args_) - mut context := base.context() or { panic('bug') } - return context.hero_config_exists('meilisearchinstaller', model.name) +//does the config exists? +pub fn exists(args_ ArgsGet)! bool { + mut context := base.context()! + mut args := args_get(args_) + return context.hero_config_exists("meilisearchinstaller", args.name) } -// load the config error if it doesn't exist -pub fn load(args_ ArgsGet) ! { - mut model := args_get(args_) - mut context := base.context()! - mut heroscript := context.hero_config_get('meilisearchinstaller', model.name)! - play(heroscript: heroscript)! +pub fn delete(args_ ArgsGet)! { + mut args := args_get(args_) + mut context:=base.context()! + context.hero_config_delete("meilisearchinstaller",args.name)! + if args.name in meilisearchinstaller_global { + //del meilisearchinstaller_global[args.name] + } } -// save the config to the filesystem in the context -pub fn save(o MeilisearchServer) ! { - mut context := base.context()! - heroscript := encoderhero.encode[MeilisearchServer](o)! - context.hero_config_set('meilisearchinstaller', model.name, heroscript)! +//only sets in mem, does not set as config +fn set_in_mem(o MeilisearchServer)! { + mut o2:=obj_init(o)! + meilisearchinstaller_global[o.name] = &o2 + meilisearchinstaller_default = o.name } + @[params] pub struct PlayArgs { pub mut: - heroscript string // if filled in then plbook will be made out of it - plbook ?playbook.PlayBook - reset bool + heroscript string //if filled in then plbook will be made out of it + plbook ?playbook.PlayBook + reset bool } pub fn play(args_ PlayArgs) ! { - mut model := args_ + + mut args:=args_ - if model.heroscript == '' { - model.heroscript = heroscript_default()! - } - mut plbook := model.plbook or { playbook.new(text: model.heroscript)! } - mut configure_actions := plbook.find(filter: 'meilisearchinstaller.configure')! - if configure_actions.len > 0 { - for config_action in configure_actions { - mut p := config_action.params - mycfg := cfg_play(p)! - console.print_debug('install action meilisearchinstaller.configure\n${mycfg}') - set(mycfg)! - save(mycfg)! - } - } + mut plbook := args.plbook or { + playbook.new(text: args.heroscript)! + } + + mut install_actions := plbook.find(filter: 'meilisearchinstaller.configure')! + if install_actions.len > 0 { + for install_action in install_actions { + heroscript:=install_action.heroscript() + mut obj2:=heroscript_loads(heroscript)! + set(obj2)! + } + } - mut other_actions := plbook.find(filter: 'meilisearchinstaller.')! - for other_action in other_actions { - if other_action.name in ['destroy', 'install', 'build'] { - mut p := other_action.params - reset := p.get_default_false('reset') - if other_action.name == 'destroy' || reset { - console.print_debug('install action meilisearchinstaller.destroy') - destroy_()! - } - if other_action.name == 'install' { - console.print_debug('install action meilisearchinstaller.install') - install_()! - } - } - if other_action.name in ['start', 'stop', 'restart'] { - mut p := other_action.params - name := p.get('name')! - mut meilisearchinstaller_obj := get(name: name)! - console.print_debug('action object:\n${meilisearchinstaller_obj}') - if other_action.name == 'start' { - console.print_debug('install action meilisearchinstaller.${other_action.name}') - meilisearchinstaller_obj.start()! - } + mut other_actions := plbook.find(filter: 'meilisearchinstaller.')! + for other_action in other_actions { + if other_action.name in ["destroy","install","build"]{ + mut p := other_action.params + reset:=p.get_default_false("reset") + if other_action.name == "destroy" || reset{ + console.print_debug("install action meilisearchinstaller.destroy") + destroy()! + } + if other_action.name == "install"{ + console.print_debug("install action meilisearchinstaller.install") + install()! + } + } + if other_action.name in ["start","stop","restart"]{ + mut p := other_action.params + name := p.get('name')! + mut meilisearchinstaller_obj:=get(name:name)! + console.print_debug("action object:\n${meilisearchinstaller_obj}") + if other_action.name == "start"{ + console.print_debug("install action meilisearchinstaller.${other_action.name}") + meilisearchinstaller_obj.start()! + } + + if other_action.name == "stop"{ + console.print_debug("install action meilisearchinstaller.${other_action.name}") + meilisearchinstaller_obj.stop()! + } + if other_action.name == "restart"{ + console.print_debug("install action meilisearchinstaller.${other_action.name}") + meilisearchinstaller_obj.restart()! + } + } + } - if other_action.name == 'stop' { - console.print_debug('install action meilisearchinstaller.${other_action.name}') - meilisearchinstaller_obj.stop()! - } - if other_action.name == 'restart' { - console.print_debug('install action meilisearchinstaller.${other_action.name}') - meilisearchinstaller_obj.restart()! - } - } - } } + //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////# LIVE CYCLE MANAGEMENT FOR INSTALLERS /////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// -// load from disk and make sure is properly intialized -pub fn (mut self MeilisearchServer) reload() ! { - switch(self.name) - self = obj_init(self)! +fn startupmanager_get(cat zinit.StartupManagerType) !startupmanager.StartupManager { + // unknown + // screen + // zinit + // tmux + // systemd + match cat{ + .zinit{ + console.print_debug("startupmanager: zinit") + return startupmanager.get(cat:.zinit)! + } + .systemd{ + console.print_debug("startupmanager: systemd") + return startupmanager.get(cat:.systemd)! + }else{ + console.print_debug("startupmanager: auto") + return startupmanager.get()! + } + } } -fn startupmanager_get(cat zinit.StartupManagerType) !startupmanager.StartupManager { - // unknown - // screen - // zinit - // tmux - // systemd - match cat { - .zinit { - console.print_debug('startupmanager: zinit') - return startupmanager.get(cat: .zinit)! - } - .systemd { - console.print_debug('startupmanager: systemd') - return startupmanager.get(cat: .systemd)! - } - else { - console.print_debug('startupmanager: auto') - return startupmanager.get()! - } - } +//load from disk and make sure is properly intialized +pub fn (mut self MeilisearchServer) reload() ! { + switch(self.name) + self=obj_init(self)! } pub fn (mut self MeilisearchServer) start() ! { - switch(self.name) - if self.running()! { - return - } + switch(self.name) + if self.running()!{ + return + } - console.print_header('meilisearchinstaller start') + console.print_header('meilisearchinstaller start') - if !installed_()! { - install_()! - } + if ! installed()!{ + install()! + } - configure()! + configure()! - start_pre()! + start_pre()! - for zprocess in startupcmd()! { - mut sm := startupmanager_get(zprocess.startuptype)! + for zprocess in startupcmd()!{ + mut sm:=startupmanager_get(zprocess.startuptype)! - console.print_debug('starting meilisearchinstaller with ${zprocess.startuptype}...') + console.print_debug('starting meilisearchinstaller with ${zprocess.startuptype}...') - sm.new(zprocess)! + sm.new(zprocess)! - sm.start(zprocess.name)! - } + sm.start(zprocess.name)! + } - start_post()! + start_post()! + + for _ in 0 .. 50 { + if self.running()! { + return + } + time.sleep(100 * time.millisecond) + } + return error('meilisearchinstaller did not install properly.') - for _ in 0 .. 50 { - if self.running()! { - return - } - time.sleep(100 * time.millisecond) - } - return error('meilisearchinstaller did not install properly.') } -pub fn (mut self MeilisearchServer) install_start(model InstallArgs) ! { - switch(self.name) - self.install(model)! - self.start()! +pub fn (mut self MeilisearchServer) install_start(args InstallArgs) ! { + switch(self.name) + self.install(args)! + self.start()! } pub fn (mut self MeilisearchServer) stop() ! { - switch(self.name) - stop_pre()! - for zprocess in startupcmd()! { - mut sm := startupmanager_get(zprocess.startuptype)! - sm.stop(zprocess.name)! - } - stop_post()! + switch(self.name) + stop_pre()! + for zprocess in startupcmd()!{ + mut sm:=startupmanager_get(zprocess.startuptype)! + sm.stop(zprocess.name)! + } + stop_post()! } pub fn (mut self MeilisearchServer) restart() ! { - switch(self.name) - self.stop()! - self.start()! + switch(self.name) + self.stop()! + self.start()! } pub fn (mut self MeilisearchServer) running() !bool { - switch(self.name) + switch(self.name) - // walk over the generic processes, if not running return - for zprocess in startupcmd()! { - mut sm := startupmanager_get(zprocess.startuptype)! - r := sm.running(zprocess.name)! - if r == false { - return false - } - } - return running()! + //walk over the generic processes, if not running return + for zprocess in startupcmd()!{ + mut sm:=startupmanager_get(zprocess.startuptype)! + r:=sm.running(zprocess.name)! + if r==false{ + return false + } + } + return running()! } @[params] -pub struct InstallArgs { +pub struct InstallArgs{ pub mut: - reset bool -} - -// switch instance to be used for meilisearchinstaller -pub fn switch(name string) { - meilisearchinstaller_default = name + reset bool } pub fn (mut self MeilisearchServer) install(args InstallArgs) ! { - switch(self.name) - if args.reset { - destroy_()! - } - if !(installed_()!) { - install_()! - } + switch(self.name) + if args.reset || (!installed()!) { + install()! + } } pub fn (mut self MeilisearchServer) build() ! { - switch(self.name) - build_()! + switch(self.name) + build()! } pub fn (mut self MeilisearchServer) destroy() ! { - switch(self.name) - self.stop() or {} - destroy_()! + switch(self.name) + self.stop() or {} + destroy()! +} + + + +//switch instance to be used for meilisearchinstaller +pub fn switch(name string) { + meilisearchinstaller_default = name +} + + +//helpers + +@[params] +pub struct DefaultConfigArgs{ + instance string = 'default' } diff --git a/lib/installers/db/meilisearchinstaller/meilisearchinstaller_factory_0.v b/lib/installers/db/meilisearchinstaller/meilisearchinstaller_factory_0.v new file mode 100644 index 00000000..0cfe4ee4 --- /dev/null +++ b/lib/installers/db/meilisearchinstaller/meilisearchinstaller_factory_0.v @@ -0,0 +1,281 @@ +module meilisearchinstaller + +// import freeflowuniverse.herolib.core.base +// import freeflowuniverse.herolib.core.playbook +// import freeflowuniverse.herolib.ui.console +// import freeflowuniverse.herolib.data.encoderhero +// import freeflowuniverse.herolib.sysadmin.startupmanager +// import freeflowuniverse.herolib.osal.zinit +// import time + +// __global ( +// meilisearchinstaller_global map[string]&MeilisearchServer +// meilisearchinstaller_default string +// ) + +// /////////FACTORY + +// @[params] +// pub struct ArgsGet { +// pub mut: +// name string +// } + +// fn args_get(args_ ArgsGet) ArgsGet { +// mut model := args_ +// if model.name == '' { +// model.name = meilisearchinstaller_default +// } +// if model.name == '' { +// model.name = 'default' +// } +// return model +// } + +// pub fn get(args_ ArgsGet) !&MeilisearchServer { +// mut args := args_get(args_) +// if args.name !in meilisearchinstaller_global { +// if args.name == 'default' { +// if !config_exists(args) { +// if default { +// mut context := base.context() or { panic('bug') } +// context.hero_config_set('meilisearchinstaller', model.name, heroscript_default()!)! +// } +// } +// load(args)! +// } +// } +// return meilisearchinstaller_global[args.name] or { +// println(meilisearchinstaller_global) +// panic('could not get config for ${args.name} with name:${model.name}') +// } +// } + +// // set the model in mem and the config on the filesystem +// pub fn set(o MeilisearchServer) ! { +// mut o2 := obj_init(o)! +// meilisearchinstaller_global[o.name] = &o2 +// meilisearchinstaller_default = o.name +// } + +// // check we find the config on the filesystem +// pub fn exists(args_ ArgsGet) bool { +// mut model := args_get(args_) +// mut context := base.context() or { panic('bug') } +// return context.hero_config_exists('meilisearchinstaller', model.name) +// } + +// // load the config error if it doesn't exist +// pub fn load(args_ ArgsGet) ! { +// mut model := args_get(args_) +// mut context := base.context()! +// mut heroscript := context.hero_config_get('meilisearchinstaller', model.name)! +// play(heroscript: heroscript)! +// } + +// // save the config to the filesystem in the context +// pub fn save(o MeilisearchServer) ! { +// mut context := base.context()! +// heroscript := encoderhero.encode[MeilisearchServer](o)! +// context.hero_config_set('meilisearchinstaller', model.name, heroscript)! +// } + +// @[params] +// pub struct PlayArgs { +// pub mut: +// heroscript string // if filled in then plbook will be made out of it +// plbook ?playbook.PlayBook +// reset bool +// } + +// pub fn play(args_ PlayArgs) ! { +// mut model := args_ + +// if model.heroscript == '' { +// model.heroscript = heroscript_default()! +// } +// mut plbook := model.plbook or { playbook.new(text: model.heroscript)! } + +// mut configure_actions := plbook.find(filter: 'meilisearchinstaller.configure')! +// if configure_actions.len > 0 { +// for config_action in configure_actions { +// mut p := config_action.params +// mycfg := cfg_play(p)! +// console.print_debug('install action meilisearchinstaller.configure\n${mycfg}') +// set(mycfg)! +// save(mycfg)! +// } +// } + +// mut other_actions := plbook.find(filter: 'meilisearchinstaller.')! +// for other_action in other_actions { +// if other_action.name in ['destroy', 'install', 'build'] { +// mut p := other_action.params +// reset := p.get_default_false('reset') +// if other_action.name == 'destroy' || reset { +// console.print_debug('install action meilisearchinstaller.destroy') +// destroy_()! +// } +// if other_action.name == 'install' { +// console.print_debug('install action meilisearchinstaller.install') +// install_()! +// } +// } +// if other_action.name in ['start', 'stop', 'restart'] { +// mut p := other_action.params +// name := p.get('name')! +// mut meilisearchinstaller_obj := get(name: name)! +// console.print_debug('action object:\n${meilisearchinstaller_obj}') +// if other_action.name == 'start' { +// console.print_debug('install action meilisearchinstaller.${other_action.name}') +// meilisearchinstaller_obj.start()! +// } + +// if other_action.name == 'stop' { +// console.print_debug('install action meilisearchinstaller.${other_action.name}') +// meilisearchinstaller_obj.stop()! +// } +// if other_action.name == 'restart' { +// console.print_debug('install action meilisearchinstaller.${other_action.name}') +// meilisearchinstaller_obj.restart()! +// } +// } +// } +// } + +// //////////////////////////////////////////////////////////////////////////////////////////////////// +// //////////////////////////# LIVE CYCLE MANAGEMENT FOR INSTALLERS /////////////////////////////////// +// //////////////////////////////////////////////////////////////////////////////////////////////////// + +// // load from disk and make sure is properly intialized +// pub fn (mut self MeilisearchServer) reload() ! { +// switch(self.name) +// self = obj_init(self)! +// } + +// fn startupmanager_get(cat zinit.StartupManagerType) !startupmanager.StartupManager { +// // unknown +// // screen +// // zinit +// // tmux +// // systemd +// match cat { +// .zinit { +// console.print_debug('startupmanager: zinit') +// return startupmanager.get(cat: .zinit)! +// } +// .systemd { +// console.print_debug('startupmanager: systemd') +// return startupmanager.get(cat: .systemd)! +// } +// else { +// console.print_debug('startupmanager: auto') +// return startupmanager.get()! +// } +// } +// } + +// pub fn (mut self MeilisearchServer) start() ! { +// switch(self.name) +// if self.running()! { +// return +// } + +// console.print_header('meilisearchinstaller start') + +// if !installed_()! { +// install_()! +// } + +// configure()! + +// start_pre()! + +// for zprocess in startupcmd()! { +// mut sm := startupmanager_get(zprocess.startuptype)! + +// console.print_debug('starting meilisearchinstaller with ${zprocess.startuptype}...') + +// sm.new(zprocess)! + +// sm.start(zprocess.name)! +// } + +// start_post()! + +// for _ in 0 .. 50 { +// if self.running()! { +// return +// } +// time.sleep(100 * time.millisecond) +// } +// return error('meilisearchinstaller did not install properly.') +// } + +// pub fn (mut self MeilisearchServer) install_start(model InstallArgs) ! { +// switch(self.name) +// self.install(model)! +// self.start()! +// } + +// pub fn (mut self MeilisearchServer) stop() ! { +// switch(self.name) +// stop_pre()! +// for zprocess in startupcmd()! { +// mut sm := startupmanager_get(zprocess.startuptype)! +// sm.stop(zprocess.name)! +// } +// stop_post()! +// } + +// pub fn (mut self MeilisearchServer) restart() ! { +// switch(self.name) +// self.stop()! +// self.start()! +// } + +// pub fn (mut self MeilisearchServer) running() !bool { +// switch(self.name) + +// // walk over the generic processes, if not running return +// for zprocess in startupcmd()! { +// mut sm := startupmanager_get(zprocess.startuptype)! +// r := sm.running(zprocess.name)! +// if r == false { +// return false +// } +// } +// return running()! +// } + +// @[params] +// pub struct InstallArgs { +// pub mut: +// reset bool +// } + +// // switch instance to be used for meilisearchinstaller +// pub fn switch(name string) { +// meilisearchinstaller_default = name +// } + +// pub fn (mut self MeilisearchServer) install(args InstallArgs) ! { +// switch(self.name) +// if args.reset { +// destroy_()! +// } +// if !(installed_()!) { +// install_()! +// } +// } + +// pub fn (mut self MeilisearchServer) build() ! { +// switch(self.name) +// build_()! +// } + +// pub fn (mut self MeilisearchServer) destroy() ! { +// switch(self.name) +// self.stop() or {} +// destroy_()! +// } diff --git a/lib/installers/db/meilisearchinstaller/meilisearchinstaller_model.v b/lib/installers/db/meilisearchinstaller/meilisearchinstaller_model.v index 5410a5f4..f6dc93f8 100644 --- a/lib/installers/db/meilisearchinstaller/meilisearchinstaller_model.v +++ b/lib/installers/db/meilisearchinstaller/meilisearchinstaller_model.v @@ -1,59 +1,45 @@ module meilisearchinstaller -import freeflowuniverse.herolib.data.paramsparser +import freeflowuniverse.herolib.data.encoderhero pub const version = '1.11.3' const singleton = false const default = true -pub fn heroscript_default() !string { - heroscript := " - !!meilisearch.configure - name:'default' - masterkey: '1234' - host: 'localhost' - port: 7700 - production: 0 - " - - return heroscript -} - // THIS THE THE SOURCE OF THE INFORMATION OF THIS FILE, HERE WE HAVE THE CONFIG OBJECT CONFIGURED AND MODELLED +@[heap] pub struct MeilisearchServer { pub mut: name string = 'default' - path string + path string = '/tmp/meilisearch' masterkey string @[secret] - host string - port int + host string = 'localhost' + port int = 7700 production bool } -fn cfg_play(p paramsparser.Params) !MeilisearchServer { - name := p.get_default('name', 'default')! - mut mycfg := MeilisearchServer{ - name: name - path: p.get_default('path', '{HOME}/hero/var/meilisearch/${name}')! - host: p.get_default('host', 'localhost')! - masterkey: p.get_default('masterkey', '1234')! - port: p.get_int_default('port', 7700)! - production: p.get_default_false('production') +// your checking & initialization code if needed +fn obj_init(mycfg_ MeilisearchServer) !MeilisearchServer { + mut mycfg := mycfg_ + if mycfg.masterkey == '' { + return error('masterkey is empty') } - return mycfg -} -fn obj_init(obj_ MeilisearchServer) !MeilisearchServer { - // never call get here, only thing we can do here is work on object itself - mut obj := obj_ - return obj + return mycfg } // called before start if done fn configure() ! { // mut installer := get()! - // mut mycode := $tmpl('templates/atemplate.yaml') - // mut path := pathlib.get_file(path: cfg.configpath, create: true)! - // path.write(mycode)! - // console.print_debug(mycode) +} + +/////////////NORMALLY NO NEED TO TOUCH + +pub fn heroscript_dumps(obj MeilisearchServer) !string { + return encoderhero.encode[MeilisearchServer](obj)! +} + +pub fn heroscript_loads(heroscript string) !MeilisearchServer { + mut obj := encoderhero.decode[MeilisearchServer](heroscript)! + return obj }