Project Poodle - App-X - app builder
This repo is an application builder that enables easy building of data schema, rest API, and UI
-
NodeJS v14 or above (ES module support) https://nodejs.org/en/
-
MySQL v5.7 or above (JSON support) https://www.mysql.com/
-- edit app/init.d/init.yaml
update credentials and mysql connection info
$ make build (this will build both server and client)
$ make init (this will initialize the database)
$ make run (this will start the server)
-- Use a browser to connect to http://localhost:3000/
$ tar cvzf poodle-appx--0.1.tgz -C helm-charts poodle-appx
$ kubectl create namespace poodle-appx
$ helm install --debug poodle-appx ./poodle-appx--0.1.tgz --namespace poodle-appx
# To Verify or Debug
$ kubectl get all -n poodle-appx
$ kubectl logs -f service/poodle-appx
-- Use a browser to connect to http://localhost:3000/
$ make image
# To Launch all dependencies including DB
$ mkdir ~/mysql (mysql data dir. Not-Configurable)
$ curl https://raw.githubusercontent.com/projectpoodle/poodle-appx/main/docker-compose.yml > docker-compose.yml
$ docker compose up &
$ docker-compose up & (Use for older versions )
-- Use a browser to connect to http://localhost:3000/
# To stop & clean all containers and dependencies
$ docker compose down
$ docker run \
-p 127.0.0.1:3000:3000 \
-e mysql_host=<your DB hosts' IP here> \
-e mysql_admin_pass=<p@$$w0rD> \
-e mysql_admin_user=root \
-e mysql_port=3306 \
--name=poodle-appx \
poodlehub/poodle-appx:latest
Note: If your DB is running on Mac then the mysql_host is to be found using the below command
$ ipconfig getifaddr en0
-- Use a browser to connect to http://localhost:3000/
-- (Optional) To check out the APIs from CLI, start a new terminal
$ http -a 'appx@LOCAL:P@@dle101' 'http://localhost:3000/api/sys/appx/base/namespace'
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 250
Content-Type: application/json; charset=utf-8
Date: Tue, 10 Nov 2020 11:10:16 GMT
ETag: W/"fa-I89e/KigIlGP3um7khL6W3FkFzI"
Keep-Alive: timeout=5
X-Powered-By: Express
[
{
"create_time": "2020-11-10T18:50:08.000Z",
"id": 1,
"namespace": "sys",
"namespace_spec": {
"a": 5
},
"namespace_status": {
"s": 3
},
"owner_name": "appx@LOCAL",
"owner_realm": "appx",
"status_time": "2020-11-10T18:57:17.000Z",
"update_time": "2020-11-10T19:10:05.000Z"
}
]
--------
$ echo '{"owner_realm":"appx","owner_name":"appx@LOCAL","namespace_spec":{"a":5}}' | http -a 'appx@LOCAL:P@@dle101' POST 'http://localhost:3000/api/sys/appx/base/namespace/sys'
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 15
Content-Type: application/json; charset=utf-8
Date: Tue, 10 Nov 2020 11:07:21 GMT
ETag: W/"f-VaSQ4oDUiZblZNAEkkN+sX+q3Sg"
Keep-Alive: timeout=5
X-Powered-By: Express
{
"status": "ok"
}
--------
$ http -a 'appx@LOCAL:P@@dle101' 'http://localhost:3000/api/sys/appx/base/namespace/sys/app/appx/internal/obj?_sort=namespace,obj_spec.comment(desc)'
[
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "transform_status",
"obj_spec": {
"comment": "initialize: transform_status"
},
"create_time": "2020-10-27T11:51:06.000Z",
"update_time": "2020-10-27T11:51:06.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 52
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "transform",
"obj_spec": {
"comment": "initialize: transform"
},
"create_time": "2020-10-27T11:51:06.000Z",
"update_time": "2020-10-27T11:51:06.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 49
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "runtime_status",
"obj_spec": {
"comment": "initialize: runtime_status"
},
"create_time": "2020-10-27T11:51:03.000Z",
"update_time": "2020-10-27T11:51:03.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 16
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "runtime",
"obj_spec": {
"comment": "initialize: runtime"
},
"create_time": "2020-10-27T11:51:03.000Z",
"update_time": "2020-10-27T11:51:03.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 13
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "relation_status",
"obj_spec": {
"comment": "initialize: relation_status"
},
"create_time": "2020-10-27T11:51:03.000Z",
"update_time": "2020-10-27T11:51:03.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 34
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "relation",
"obj_spec": {
"comment": "initialize: relation"
},
"create_time": "2020-10-27T11:51:03.000Z",
"update_time": "2020-10-27T11:51:03.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 31
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "obj_status",
"obj_spec": {
"comment": "initialize: obj_status"
},
"create_time": "2020-10-27T11:51:03.000Z",
"update_time": "2020-10-27T11:51:03.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 28
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "obj",
"obj_spec": {
"comment": "initialize: obj"
},
"create_time": "2020-10-27T11:51:03.000Z",
"update_time": "2020-10-27T11:51:03.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 25
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "namespace_status",
"obj_spec": {
"comment": "initialize: namespace_state"
},
"create_time": "2020-10-27T11:51:03.000Z",
"update_time": "2020-10-27T11:51:03.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 4
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "namespace",
"obj_spec": {
"comment": "initialize: namespace"
},
"create_time": "2020-10-27T11:51:03.000Z",
"update_time": "2020-10-27T11:51:03.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 1
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "deployment_status",
"obj_spec": {
"comment": "initialize: deployment_status"
},
"create_time": "2020-10-27T11:51:03.000Z",
"update_time": "2020-10-27T11:51:03.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 22
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "deployment",
"obj_spec": {
"comment": "initialize: deployment"
},
"create_time": "2020-10-27T11:51:03.000Z",
"update_time": "2020-10-27T11:51:03.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 19
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "attr_status",
"obj_spec": {
"comment": "initialize: attr_status"
},
"create_time": "2020-10-27T11:51:04.000Z",
"update_time": "2020-10-27T11:51:04.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 40
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "attr",
"obj_spec": {
"comment": "initialize: attr"
},
"create_time": "2020-10-27T11:51:04.000Z",
"update_time": "2020-10-27T11:51:04.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 37
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "app_status",
"obj_spec": {
"comment": "initialize: app_status"
},
"create_time": "2020-10-27T11:51:03.000Z",
"update_time": "2020-10-27T11:51:03.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 10
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "app",
"obj_spec": {
"comment": "initialize: app"
},
"create_time": "2020-10-27T11:51:03.000Z",
"update_time": "2020-10-27T11:51:03.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 7
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "api_status",
"obj_spec": {
"comment": "initialize: api_status"
},
"create_time": "2020-10-27T11:51:05.000Z",
"update_time": "2020-10-27T11:51:05.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 46
},
{
"namespace": "sys",
"app_name": "appx",
"app_ver": "internal",
"obj_name": "api",
"obj_spec": {
"comment": "initialize: api"
},
"create_time": "2020-10-27T11:51:05.000Z",
"update_time": "2020-10-27T11:51:05.000Z",
"app_spec": {
"comment": "initialize"
},
"owner_scope": "local",
"owner_name": "appx",
"namespace_spec": {
"comment": "test"
},
"id": 43
}
]