ytti / oxidized-web Goto Github PK
View Code? Open in Web Editor NEWWeb UI + RESTful API for Oxidized
Web UI + RESTful API for Oxidized
Although Bootstrap is used, the mobile experience is poor. The way the UI is written, it does not detect mobile devices and adjust accordingly.
There are some elements that unnecessarily use custom CSS (most strikingly, the refresh button). This should be changed to use the Bootstrap CSS and components where possible.
Tables should be updated to use additional classes, such as table-condensed
, table-hover
, and table-striped
.
sinatra and sinatra-contrib need to be updated to use at least version 1.4.6 as commit afa6e9f changes require of sass and haml to be from tilt.
The webinterface's ordering seems wrong:
sw1.foo
sw10.bar
sw11.quux
sw2.quuux
Wheras it should be ordered like so:
sw1.foo
sw2.quuux
sw10.bar
sw11.quux
Just a suggestion, but the enable password should probably be hidden on the web frontend.
The HAML templates do not make use of some HAML features that improve the readability of the templates. At a minimum, the templates should be updated to:
div
tagsclass
syntaxid
syntaxoxidized (0.10.0, 0.4.1)
oxidized-script (0.1.1)
oxidized-web (0.6.1, 0.6.0)
When I run:
curl http://localhost:8888/reload
I get:
Errno::ENOENT: No such file or directory - /home/oxidized/.gem/ruby/gems/oxidized-web-0.6.1/lib/oxidized/web/views/default.haml
This file indeed does not exist.
full error:
Errno::ENOENT: No such file or directory - /home/oxidized/.gem/ruby/gems/oxidized-web-0.6.1/lib/oxidized/web/views/default.haml
/home/oxidized/.gem/ruby/gems/tilt-2.0.2/lib/tilt/template.rb:219:in initialize' /home/oxidized/.gem/ruby/gems/tilt-2.0.2/lib/tilt/template.rb:219:in
open'
/home/oxidized/.gem/ruby/gems/tilt-2.0.2/lib/tilt/template.rb:219:in read_template_file' /home/oxidized/.gem/ruby/gems/tilt-2.0.2/lib/tilt/template.rb:78:in
block in initialize'
/home/oxidized/.gem/ruby/gems/tilt-2.0.2/lib/tilt/template.rb:79:in call' /home/oxidized/.gem/ruby/gems/tilt-2.0.2/lib/tilt/template.rb:79:in
initialize'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:861:in new' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:861:in
block in compile_template'
/home/oxidized/.gem/ruby/gems/tilt-2.0.2/lib/tilt.rb:104:in block in fetch' /home/oxidized/.gem/ruby/gems/tilt-2.0.2/lib/tilt.rb:103:in
fetch'
/home/oxidized/.gem/ruby/gems/tilt-2.0.2/lib/tilt.rb:103:in fetch' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:840:in
compile_template'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:821:in render' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:676:in
haml'
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.1/lib/oxidized/web/webapp.rb:235:in out' /home/oxidized/.gem/ruby/gems/oxidized-web-0.6.1/lib/oxidized/web/webapp.rb:73:in
block in class:WebApp'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1610:in call' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1610:in
block in compile!'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:974:in []' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:974:in
block (3 levels) in route!'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:993:in route_eval' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:974:in
block (2 levels) in route!'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1014:in block in process_route' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1012:in
catch'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1012:in process_route' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:972:in
block in route!'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:971:in each' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:971:in
route!'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1084:in block in dispatch!' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1066:in
block in invoke'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1066:in catch' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1066:in
invoke'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1081:in dispatch!' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:906:in
block in call!'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1066:in block in invoke' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1066:in
catch'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1066:in invoke' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:906:in
call!'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:894:in call' /home/oxidized/.gem/ruby/gems/rack-protection-1.5.3/lib/rack/protection/xss_header.rb:18:in
call'
/home/oxidized/.gem/ruby/gems/rack-protection-1.5.3/lib/rack/protection/path_traversal.rb:16:in call' /home/oxidized/.gem/ruby/gems/rack-protection-1.5.3/lib/rack/protection/json_csrf.rb:18:in
call'
/home/oxidized/.gem/ruby/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in call' /home/oxidized/.gem/ruby/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in
call'
/home/oxidized/.gem/ruby/gems/rack-protection-1.5.3/lib/rack/protection/frame_options.rb:31:in call /home/oxidized/.gem/ruby/gems/rack-1.6.4/lib/rack/nulllogger.rb:9:in
call'
/home/oxidized/.gem/ruby/gems/rack-1.6.4/lib/rack/head.rb:13:in call' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/show_exceptions.rb:21:in
call'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:181:in call' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:2021:in
call'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1486:in block in call' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1795:in
synchronize'
/home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1486:in call' /home/oxidized/.gem/ruby/gems/rack-1.6.4/lib/rack/urlmap.rb:66:in
block in call'
/home/oxidized/.gem/ruby/gems/rack-1.6.4/lib/rack/urlmap.rb:50:in each' /home/oxidized/.gem/ruby/gems/rack-1.6.4/lib/rack/urlmap.rb:50:in
call'
/home/oxidized/.gem/ruby/gems/rack-1.6.4/lib/rack/builder.rb:153:in call' /home/oxidized/.gem/ruby/gems/puma-2.15.3/lib/puma/server.rb:541:in
handle_request'
/home/oxidized/.gem/ruby/gems/puma-2.15.3/lib/puma/server.rb:388:in process_client' /home/oxidized/.gem/ruby/gems/puma-2.15.3/lib/puma/server.rb:270:in
block in run'
/home/oxidized/.gem/ruby/gems/puma-2.15.3/lib/puma/thread_pool.rb:106:in call' /home/oxidized/.gem/ruby/gems/puma-2.15.3/lib/puma/thread_pool.rb:106:in
block in spawn_thread'
Other API calls such as getting a host's configuration works fine.
When querying a obviously non existent API call I get a non-existent answer
curl http://localhost:8888/foo
When querying a non-existent, but similar API call then I get the same as with reload:
curl http://localhost:8888/reloadje
Errno::ENOENT: No such file or directory - /home/oxidized/.gem/ruby/gems/oxidized-web-0.6.1/lib/oxidized/web/views/default.haml
....
Unknowingly introduced in 4ae7a5e.
$ rake build
bundler missing
WARNING: pessimistic dependency on sinatra (~> 1.4.6) may be overly strict
if sinatra is semantically versioned, use:
add_runtime_dependency 'sinatra', '~> 1.4', '>= 1.4.6'
WARNING: pessimistic dependency on sinatra-contrib (~> 1.4.6) may be overly strict
if sinatra-contrib is semantically versioned, use:
add_runtime_dependency 'sinatra-contrib', '~> 1.4', '>= 1.4.6'
WARNING: See http://guides.rubygems.org/specification-reference/ for help
Successfully built RubyGem
Name: oxidized-web
Version: 0.5.2
File: oxidized-web-0.5.2.gem
Sometimes I want to search the configs from places other than the nodes page. Also, migrating RANCID configs seems more suited to being in a navbar.
Please forgive my ignorance here.
I've got this on the same box as LibreNMS, and oxidized itself is working fine.
ruby 10519 root 9u IPv4 59343430 0t0 TCP 127.0.0.1:8888 (LISTEN)
What is the default directory or port for oxidized-web?
Related to #68.
Rewrite time conversion code in lib/oxidized/web/public/scripts/oxidized.js
to be in its own function.
Related to #68.
Prefer single quotes over double quotes when interpolation is not necessary.
This could be as simple as offering a page that loads the log file in full and displays it via www.
If the web UI is the preferred way to interact with oxi, it should be possible to look up any errors/warnings in there, as well.
I cannot access the live demo site.
hai, i want to ask, how to make grouping device on oxidized for example based on location, all my device now belonging default group. please some advice.
/node/fetch/groupName/nodeName returns "node not found"
/node/fetch/nodeName also returns "node not found"
After removing group from map, node's config is returned from /node/fetch/nodeName
Hosts that don't work are not highlighted and thus are easy-ish to overlook. Please highlight them.
XXX YYY default no_connection 2014-08-12 07:54:08 UTC config update
I select IP in the Hide/Show Columns select-list, the IP column shows up.
If I click the Refresh button in the UI or F5 in the browser the IP columns disappears again.
Would have been nice if this setting is saved somewhere permanently.
Demo URL:
http://1.1.1.1:8888/node/next/$group/$device (e.g. http://1.1.1.1:8888/node/next/edge/edgeswitch1)
shows Sinatra error (not found).
URL without group works:
http://1.1.1.1:8888/node/next/$device (e.g. http://1.1.1.1:8888/node/next/edgeswitch1)
API should not conditionally return attributes. It should return all attributes, even if they are empty.
This is a potentially breaking change if others are relying on attributes being absent.
It is possible to add a field to specify the timezone for the Last Update ?
I can't for the life of me figure this out i'm getting returned the correct info from librenms, but oxidized refused to start running it just says no usable nodes... please help
curl -H 'X-Auth-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxc' http://127.0.0.1/api/v0/oxidized
Returns the following....
[
{
"hostname": "ofcswitch-1",
"os": "xos"
},
{
"hostname": "ofcswitch-1",
"os": "xos"
}
]
/root/.config/oxidized/config
username: usernameexample
password: passwordexample
debug: true
rest: 127.0.0.1:8888
input:
default: ssh
debug: false
ssh:
secure: false
output:
default: file
file:
directory: /root/.config/oxidized/configs
source:
default: http
debug: true
http:
url: http://127.0.0.1/api/v0/oxidized
scheme: http
debug: true
delimiter: !ruby/regexp /:/
map:
name: hostname
model: os
headers:
X-Auth-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxc
i even tried adding model_map: xos:xos but didn't work either still getting same error every time i try to start it
[root@librenms oxidized]# oxidized
source returns no usable nodes
/usr/local/share/gems/gems/oxidized-0.9.0/lib/oxidized/core.rb:23:in initialize': source returns no usable nodes (Oxidized::Core::NoNodesFound) from /usr/local/share/gems/gems/oxidized-0.9.0/lib/oxidized/core.rb:12:in
new'
from /usr/local/share/gems/gems/oxidized-0.9.0/lib/oxidized/core.rb:12:in new' from /usr/local/share/gems/gems/oxidized-0.9.0/lib/oxidized/cli.rb:9:in
run'
from /usr/local/share/gems/gems/oxidized-0.9.0/bin/oxidized:9:in <top (required)>' from /usr/local/bin/oxidized:23:in
load'
from /usr/local/bin/oxidized:23:in `
2016-01-07 10:52:36 - SyntaxError - /home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:9: syntax error, unexpected ':', expecting =>
'data-toggle': 'collapse',
^
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:9: syntax error, unexpected ',', expecting tSTRING_DEND
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:10: syntax error, unexpected ':', expecting tSTRING_DEND
'data-target': '#ox-nav',
^
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:10: syntax error, unexpected ',', expecting tSTRING_DEND
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:11: syntax error, unexpected ':', expecting tSTRING_DEND
'aria-expanded': 'false')}>\n <spa...
^
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:11: syntax error, unexpected ')', expecting tSTRING_DEND
'aria-expanded': 'false')}>\n <span class='...
^
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:11: syntax error, unexpected keyword_class, expecting keyword_do or '{' or '('
...se')}>\n Toggle Navigation<...
... ^
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:11: syntax error, unexpected tCONSTANT, expecting keyword_do or '{' or '('
...ass='sr-only'>Toggle Navigation\n <span cl...
... ^
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:11: unknown regexp options - pa
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:11: syntax error, unexpected $undefined
...\n <span class='ico...
... ^
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:11: syntax error, unexpected keyword_class, expecting keyword_do or '{' or '('
.../span>\n \n ...
... ^
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:11: syntax error, unexpected '<'
... \n <span cla...
... ^
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:11: unknown regexp options - pa
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:11: syntax error, unexpected $undefined
...\n \n ...
... ^
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:17: unknown regexp option - g
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:17: syntax error, unexpected $undefined
...ng_40px.png'))}>Oxidized\n \n </di...
... ^
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:17: unknown regexp options - dv
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:17: syntax error, unexpected $undefined
... \n \n <div class='collapse...
... ^
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:17: syntax error, unexpected keyword_class, expecting keyword_do or '{' or '('
... \n <div class='collapse navbar-collapse' i...
... ^
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:17: syntax error, unexpected tIDENTIFIER, expecting tSTRING_DEND
...s='collapse navbar-collapse' id='ox-nav'>\n <ul cla...
... ^
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:17: syntax error, unexpected $undefined
... navbar-collapse' id='ox-nav'>\n <ul class='nav nav...
... ^
/home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/views/layout.haml:17: syntax error, unexpected keyword_class, expecting keyword_do or '{' or '('
...='ox-nav'>\n
class_eval' /home/oxidized/.gem/ruby/gems/tilt-1.4.1/lib/tilt/template.rb:264:in
compile_template_method'compiled_method' /home/oxidized/.gem/ruby/gems/tilt-1.4.1/lib/tilt/template.rb:169:in
evaluate'evaluate' /home/oxidized/.gem/ruby/gems/tilt-1.4.1/lib/tilt/template.rb:103:in
render'render' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:831:in
block in render'catch' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:831:in
render'haml' /home/oxidized/.gem/ruby/gems/oxidized-web-0.6.0/lib/oxidized/web/webapp.rb:235:in
out'block in <class:WebApp>' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1610:in
call'block in compile!' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:974:in
[]'block (3 levels) in route!' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:993:in
route_eval'block (2 levels) in route!' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1014:in
block in process_route'catch' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1012:in
process_route'block in route!' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:971:in
each'route!' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1084:in
block in dispatch!'block in invoke' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1066:in
catch'invoke' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1081:in
dispatch!'block in call!' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1066:in
block in invoke'catch' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1066:in
invoke'call!' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:894:in
call'call' /home/oxidized/.gem/ruby/gems/rack-protection-1.5.3/lib/rack/protection/path_traversal.rb:16:in
call'call' /home/oxidized/.gem/ruby/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in
call'call' /home/oxidized/.gem/ruby/gems/rack-protection-1.5.3/lib/rack/protection/frame_options.rb:31:in
call'call' /home/oxidized/.gem/ruby/gems/rack-1.6.0/lib/rack/head.rb:13:in
call'call' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:181:in
call'call' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1486:in
block in call'synchronize' /home/oxidized/.gem/ruby/gems/sinatra-1.4.6/lib/sinatra/base.rb:1486:in
call'block in call' /home/oxidized/.gem/ruby/gems/rack-1.6.0/lib/rack/urlmap.rb:50:in
each'call' /home/oxidized/.gem/ruby/gems/rack-1.6.0/lib/rack/builder.rb:153:in
call'handle_request' /home/oxidized/.gem/ruby/gems/puma-2.11.1/lib/puma/server.rb:375:in
process_client'block in run' /home/oxidized/.gem/ruby/gems/puma-2.11.1/lib/puma/thread_pool.rb:104:in
call'Is there a way to query for a list of available models? I'm working on a web-based way to manage the node list, and it would be great if one could validate the model before adding it to the database.
Thanks!
Related to #67.
The GET /nodes
endpoint should be documented.
A link to the stats page is missing. It can be manually accessed at the /nodes/stats
URI. Additionally, although this page exists, it doesn't appear to follow the newer UI style of other pages.
the web interface is hardcoded to be located at /
It would be v. handy to have the base URI as a configurable option, because this would allow integration into an existing web site framework using proxying.
Related to #68.
Change all hashes to new Ruby 1.9 syntax.
I must be blind, were is the installation, config and startup information?
It is possible to upgrade the gem version ?
It would be nice to have a button in the web UI to re-read the node file (router.db or similar) in the web gui (call to /reload).
Some configs have to remove things like the passwords. The problem is that these aren't escaped, so sometimes it breaks the view.
Maybe it's a good idea to escape the config?
Hi,
I'm using wildcards for authentication in .cloginrc, example:
add user *-client1 user1
add password *-client1 pass1
add user *-client2 user2
add password *-client2 pass2
It would be great if this could work with the migration tool.
As per ytti/oxidized#285, it would be nice to see some basic authentication added to the web interface to avoid exposing switch configs.
Currently, the stats page (/nodes/stats
) only provides the last failure, and only for nodes that have failed.
Looking at the JSON response, it seems we could also provide the following stats:
Currently when using the "Search in confs" button the search terms doesnt appear to support regex. So a search for ^ip http server will return no results, but ip http server returns results for ip http server and also no ip http server.
This limits the usefulness of the search in confs function to generalistic searches, rather than specific searches to identify defective devices.
Coudl we get a regex compatible search field some time?
I'm using groups and I get this error when clicking on versions.
ArgumentError at /node/version
wrong number of arguments (0 for 1+)
file: versions.haml
location: count
line: 41
The stats page called a non-existent sort function on the table. That is removed in f90f0ea. A functioning sort mechanism should be added.
The UI for the migration page does not currently fit with the UI of the rest of the web interface. It should be updated to match the rest of the UI.
Related to #68.
Fix spacing issues.
A bug in the stats page is causing a stack trace. It did not present until I did a fresh install. The fix should be easy. I've tested it locally against a fresh install and it seems to work fine. More testing and then I'll submit.
I've seen the other posts in regards to the timestamps how they should be converting to browser time, but I can't seem to get this to work.
I have the server set to UTC and can confirm my Browser should be set to CDT.
Ideally i'd like to see it all in CDT, but am not very familiar with JS, so looking through the code didn't yield any results for me.
Can anyone point me in the right direction? To get timestamps to update based on browser time, or change the system to do CDT altogether?
Is there something wrong with the current layout? This is the way the site appears in Firefox and Chrome.
https://i.imgur.com/38br7wi.png
Not sure if this is on purpose or just some CSS that needs cleaned up. The old web ui had margins on the left and right, etc.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.