diff --git a/app/components/stat.hbs b/app/components/stat.hbs
new file mode 100644
index 0000000..31b9326
--- /dev/null
+++ b/app/components/stat.hbs
@@ -0,0 +1,15 @@
+
+
+ {{@title}}
+
+
+ {{#if (has-block)}}
+ {{yield}}
+ {{else}}
+ {{@value}}
+ {{/if}}
+
+
diff --git a/app/helpers/date-time-format.js b/app/helpers/date-time-format.js
new file mode 100644
index 0000000..ac10323
--- /dev/null
+++ b/app/helpers/date-time-format.js
@@ -0,0 +1,11 @@
+import { helper } from '@ember/component/helper';
+
+export default helper(function dateTimeFormat([date], named) {
+ if (typeof date === 'string') {
+ date = new Date(date);
+ }
+
+ const formatter = new Intl.DateTimeFormat(window.navigator.language, named);
+
+ return formatter.format(date);
+});
diff --git a/app/helpers/format-bytes.js b/app/helpers/format-bytes.js
new file mode 100644
index 0000000..9e75f25
--- /dev/null
+++ b/app/helpers/format-bytes.js
@@ -0,0 +1,11 @@
+import { helper } from '@ember/component/helper';
+
+export default helper(function formatBytes([bytes, decimals] /*, named*/) {
+ if (bytes == 0) return '0 Bytes';
+ let k = 1024,
+ dm = decimals || 2,
+ sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
+ i = Math.floor(Math.log(bytes) / Math.log(k));
+
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
+});
diff --git a/app/routes/admin.js b/app/routes/admin.js
index 6269040..9292977 100644
--- a/app/routes/admin.js
+++ b/app/routes/admin.js
@@ -1,6 +1,5 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
-import { hash } from 'rsvp';
export default class AdminRoute extends Route {
@service meilisearch;
@@ -11,10 +10,6 @@ export default class AdminRoute extends Route {
}
async model() {
- return hash({
- indexes: this.meilisearch.getIndexes(),
- health: this.meilisearch.getHealth(),
- version: this.meilisearch.getVersion(),
- });
+ return this.meilisearch.getIndexes();
}
}
diff --git a/app/routes/admin/index.js b/app/routes/admin/index.js
new file mode 100644
index 0000000..ac5f2f3
--- /dev/null
+++ b/app/routes/admin/index.js
@@ -0,0 +1,16 @@
+import Route from '@ember/routing/route';
+import { inject as service } from '@ember/service';
+import { hash } from 'rsvp';
+
+export default class AdminIndexRoute extends Route {
+ @service meilisearch;
+ @service session;
+
+ async model() {
+ return hash({
+ health: this.meilisearch.getHealth(),
+ version: this.meilisearch.getVersion(),
+ stats: this.meilisearch.getStats(),
+ });
+ }
+}
diff --git a/app/routes/index.js b/app/routes/index.js
index cba3815..e6639cd 100644
--- a/app/routes/index.js
+++ b/app/routes/index.js
@@ -5,6 +5,6 @@ export default class IndexRoute extends Route {
@service router;
beforeModel() {
- this.router.transitionTo('admin.indexes');
+ this.router.transitionTo('admin');
}
}
diff --git a/app/services/meilisearch.js b/app/services/meilisearch.js
index 6f2702f..c0e7443 100644
--- a/app/services/meilisearch.js
+++ b/app/services/meilisearch.js
@@ -16,4 +16,8 @@ export default class MeilisearchService extends Service {
getVersion() {
return query('version');
}
+
+ getStats() {
+ return query('stats');
+ }
}
diff --git a/app/templates/admin.hbs b/app/templates/admin.hbs
index 40c06c6..93e0353 100644
--- a/app/templates/admin.hbs
+++ b/app/templates/admin.hbs
@@ -14,7 +14,7 @@
}}
{{/let}}
-
- v{{@model.version.pkgVersion}}
- {{#if (eq @model.health.status 'available')}}
-
- {{else}}
-
- {{/if}}
-
diff --git a/app/templates/admin/index.hbs b/app/templates/admin/index.hbs
new file mode 100644
index 0000000..808731d
--- /dev/null
+++ b/app/templates/admin/index.hbs
@@ -0,0 +1,24 @@
+
+
+
+ {{#if (eq @model.health.status 'available')}}
+
+ {{else}}
+
+ {{/if}}
+ {{capitalize @model.health.status}}
+
+
+
+
+
+
diff --git a/tests/integration/components/stat-test.js b/tests/integration/components/stat-test.js
new file mode 100644
index 0000000..ccaa57f
--- /dev/null
+++ b/tests/integration/components/stat-test.js
@@ -0,0 +1,26 @@
+import { module, test } from 'qunit';
+import { setupRenderingTest } from 'meiliadmin/tests/helpers';
+import { render } from '@ember/test-helpers';
+import { hbs } from 'ember-cli-htmlbars';
+
+module('Integration | Component | stat', function (hooks) {
+ setupRenderingTest(hooks);
+
+ test('it renders', async function (assert) {
+ // Set any properties with this.set('myProperty', 'value');
+ // Handle any actions with this.set('myAction', function(val) { ... });
+
+ await render(hbs``);
+
+ assert.dom(this.element).hasText('');
+
+ // Template block usage:
+ await render(hbs`
+
+ template block text
+
+ `);
+
+ assert.dom(this.element).hasText('template block text');
+ });
+});
diff --git a/tests/integration/helpers/date-time-format-test.js b/tests/integration/helpers/date-time-format-test.js
new file mode 100644
index 0000000..6051a48
--- /dev/null
+++ b/tests/integration/helpers/date-time-format-test.js
@@ -0,0 +1,17 @@
+import { module, test } from 'qunit';
+import { setupRenderingTest } from 'meiliadmin/tests/helpers';
+import { render } from '@ember/test-helpers';
+import { hbs } from 'ember-cli-htmlbars';
+
+module('Integration | Helper | DateTimeFormat', function (hooks) {
+ setupRenderingTest(hooks);
+
+ // TODO: Replace this with your real tests.
+ test('it renders', async function (assert) {
+ this.set('inputValue', '1234');
+
+ await render(hbs`{{date-time-format this.inputValue}}`);
+
+ assert.dom(this.element).hasText('1234');
+ });
+});
diff --git a/tests/integration/helpers/format-bytes-test.js b/tests/integration/helpers/format-bytes-test.js
new file mode 100644
index 0000000..5f7f674
--- /dev/null
+++ b/tests/integration/helpers/format-bytes-test.js
@@ -0,0 +1,17 @@
+import { module, test } from 'qunit';
+import { setupRenderingTest } from 'meiliadmin/tests/helpers';
+import { render } from '@ember/test-helpers';
+import { hbs } from 'ember-cli-htmlbars';
+
+module('Integration | Helper | formatBytes', function (hooks) {
+ setupRenderingTest(hooks);
+
+ // TODO: Replace this with your real tests.
+ test('it renders', async function (assert) {
+ this.set('inputValue', '1234');
+
+ await render(hbs`{{format-bytes this.inputValue}}`);
+
+ assert.dom(this.element).hasText('1234');
+ });
+});
diff --git a/tests/unit/routes/admin/index-test.js b/tests/unit/routes/admin/index-test.js
new file mode 100644
index 0000000..18f1975
--- /dev/null
+++ b/tests/unit/routes/admin/index-test.js
@@ -0,0 +1,11 @@
+import { module, test } from 'qunit';
+import { setupTest } from 'meiliadmin/tests/helpers';
+
+module('Unit | Route | admin/index', function (hooks) {
+ setupTest(hooks);
+
+ test('it exists', function (assert) {
+ let route = this.owner.lookup('route:admin/index');
+ assert.ok(route);
+ });
+});