Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nexpie-grafana-theme
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kornkitt Poolsup
nexpie-grafana-theme
Commits
8fb0692d
Commit
8fb0692d
authored
Dec 26, 2017
by
Torkel Ödegaard
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/migrate-dashboard-files-to-ts'
parents
7e555091
972c3bc6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
381 additions
and
321 deletions
+381
-321
public/app/features/dashboard/all.ts
+3
-3
public/app/features/dashboard/dashboardLoaderSrv.js
+0
-109
public/app/features/dashboard/dashboard_loader_srv.ts
+139
-0
public/app/features/dashboard/share_snapshot_ctrl.ts
+49
-51
public/app/features/dashboard/specs/unsaved_changes_srv_specs.ts
+10
-5
public/app/features/dashboard/unsaved_changes_srv.ts
+180
-153
No files found.
public/app/features/dashboard/all.ts
View file @
8fb0692d
import
'./dashboard_ctrl'
;
import
'./alerting_srv'
;
import
'./history/history'
;
import
'./dashboard
LoaderS
rv'
;
import
'./dashboard
_loader_s
rv'
;
import
'./dashnav/dashnav'
;
import
'./submenu/submenu'
;
import
'./save_as_modal'
;
import
'./save_modal'
;
import
'./shareModalCtrl'
;
import
'./share
SnapshotC
trl'
;
import
'./share
_snapshot_c
trl'
;
import
'./dashboard_srv'
;
import
'./view_state_srv'
;
import
'./validation_srv'
;
import
'./time_srv'
;
import
'./unsaved
ChangesS
rv'
;
import
'./unsaved
_changes_s
rv'
;
import
'./unsaved_changes_modal'
;
import
'./timepicker/timepicker'
;
import
'./upload'
;
...
...
public/app/features/dashboard/dashboardLoaderSrv.js
deleted
100644 → 0
View file @
7e555091
define
([
'angular'
,
'moment'
,
'lodash'
,
'jquery'
,
'app/core/utils/kbn'
,
'app/core/utils/datemath'
,
'app/core/services/impression_srv'
],
function
(
angular
,
moment
,
_
,
$
,
kbn
,
dateMath
,
impressionSrv
)
{
'use strict'
;
kbn
=
kbn
.
default
;
impressionSrv
=
impressionSrv
.
default
;
var
module
=
angular
.
module
(
'grafana.services'
);
module
.
service
(
'dashboardLoaderSrv'
,
function
(
backendSrv
,
dashboardSrv
,
datasourceSrv
,
$http
,
$q
,
$timeout
,
contextSrv
,
$routeParams
,
$rootScope
)
{
var
self
=
this
;
this
.
_dashboardLoadFailed
=
function
(
title
,
snapshot
)
{
snapshot
=
snapshot
||
false
;
return
{
meta
:
{
canStar
:
false
,
isSnapshot
:
snapshot
,
canDelete
:
false
,
canSave
:
false
,
canEdit
:
false
,
dashboardNotFound
:
true
},
dashboard
:
{
title
:
title
}
};
};
this
.
loadDashboard
=
function
(
type
,
slug
)
{
var
promise
;
if
(
type
===
'script'
)
{
promise
=
this
.
_loadScriptedDashboard
(
slug
);
}
else
if
(
type
===
'snapshot'
)
{
promise
=
backendSrv
.
get
(
'/api/snapshots/'
+
$routeParams
.
slug
)
.
catch
(
function
()
{
return
self
.
_dashboardLoadFailed
(
"Snapshot not found"
,
true
);
});
}
else
{
promise
=
backendSrv
.
getDashboard
(
$routeParams
.
type
,
$routeParams
.
slug
)
.
then
(
function
(
result
)
{
if
(
result
.
meta
.
isFolder
)
{
$rootScope
.
appEvent
(
"alert-error"
,
[
'Dashboard not found'
]);
throw
new
Error
(
"Dashboard not found"
);
}
return
result
;
})
.
catch
(
function
()
{
return
self
.
_dashboardLoadFailed
(
"Not found"
);
});
}
promise
.
then
(
function
(
result
)
{
if
(
result
.
meta
.
dashboardNotFound
!==
true
)
{
impressionSrv
.
addDashboardImpression
(
result
.
dashboard
.
id
);
}
return
result
;
});
return
promise
;
};
this
.
_loadScriptedDashboard
=
function
(
file
)
{
var
url
=
'public/dashboards/'
+
file
.
replace
(
/
\.(?!
js
)
/
,
"/"
)
+
'?'
+
new
Date
().
getTime
();
return
$http
({
url
:
url
,
method
:
"GET"
})
.
then
(
this
.
_executeScript
).
then
(
function
(
result
)
{
return
{
meta
:
{
fromScript
:
true
,
canDelete
:
false
,
canSave
:
false
,
canStar
:
false
},
dashboard
:
result
.
data
};
},
function
(
err
)
{
console
.
log
(
'Script dashboard error '
+
err
);
$rootScope
.
appEvent
(
'alert-error'
,
[
"Script Error"
,
"Please make sure it exists and returns a valid dashboard"
]);
return
self
.
_dashboardLoadFailed
(
'Scripted dashboard'
);
});
};
this
.
_executeScript
=
function
(
result
)
{
var
services
=
{
dashboardSrv
:
dashboardSrv
,
datasourceSrv
:
datasourceSrv
,
$q
:
$q
,
};
/*jshint -W054 */
var
script_func
=
new
Function
(
'ARGS'
,
'kbn'
,
'dateMath'
,
'_'
,
'moment'
,
'window'
,
'document'
,
'$'
,
'jQuery'
,
'services'
,
result
.
data
);
var
script_result
=
script_func
(
$routeParams
,
kbn
,
dateMath
,
_
,
moment
,
window
,
document
,
$
,
$
,
services
);
// Handle async dashboard scripts
if
(
_
.
isFunction
(
script_result
))
{
var
deferred
=
$q
.
defer
();
script_result
(
function
(
dashboard
)
{
$timeout
(
function
()
{
deferred
.
resolve
({
data
:
dashboard
});
});
});
return
deferred
.
promise
;
}
return
{
data
:
script_result
};
};
});
});
public/app/features/dashboard/dashboard_loader_srv.ts
0 → 100644
View file @
8fb0692d
import
angular
from
'angular'
;
import
moment
from
'moment'
;
import
_
from
'lodash'
;
import
$
from
'jquery'
;
import
kbn
from
'app/core/utils/kbn'
;
import
*
as
dateMath
from
'app/core/utils/datemath'
;
import
impressionSrv
from
'app/core/services/impression_srv'
;
export
class
DashboardLoaderSrv
{
/** @ngInject */
constructor
(
private
backendSrv
,
private
dashboardSrv
,
private
datasourceSrv
,
private
$http
,
private
$q
,
private
$timeout
,
contextSrv
,
private
$routeParams
,
private
$rootScope
)
{}
_dashboardLoadFailed
(
title
,
snapshot
)
{
snapshot
=
snapshot
||
false
;
return
{
meta
:
{
canStar
:
false
,
isSnapshot
:
snapshot
,
canDelete
:
false
,
canSave
:
false
,
canEdit
:
false
,
dashboardNotFound
:
true
,
},
dashboard
:
{
title
:
title
},
};
}
loadDashboard
(
type
,
slug
)
{
var
promise
;
if
(
type
===
'script'
)
{
promise
=
this
.
_loadScriptedDashboard
(
slug
);
}
else
if
(
type
===
'snapshot'
)
{
promise
=
this
.
backendSrv
.
get
(
'/api/snapshots/'
+
this
.
$routeParams
.
slug
).
catch
(()
=>
{
return
this
.
_dashboardLoadFailed
(
'Snapshot not found'
,
true
);
});
}
else
{
promise
=
this
.
backendSrv
.
getDashboard
(
this
.
$routeParams
.
type
,
this
.
$routeParams
.
slug
)
.
then
(
result
=>
{
if
(
result
.
meta
.
isFolder
)
{
this
.
$rootScope
.
appEvent
(
'alert-error'
,
[
'Dashboard not found'
]);
throw
new
Error
(
'Dashboard not found'
);
}
return
result
;
})
.
catch
(()
=>
{
return
this
.
_dashboardLoadFailed
(
'Not found'
,
true
);
});
}
promise
.
then
(
function
(
result
)
{
if
(
result
.
meta
.
dashboardNotFound
!==
true
)
{
impressionSrv
.
addDashboardImpression
(
result
.
dashboard
.
id
);
}
return
result
;
});
return
promise
;
}
_loadScriptedDashboard
(
file
)
{
var
url
=
'public/dashboards/'
+
file
.
replace
(
/
\.(?!
js
)
/
,
'/'
)
+
'?'
+
new
Date
().
getTime
();
return
this
.
$http
({
url
:
url
,
method
:
'GET'
})
.
then
(
this
.
_executeScript
)
.
then
(
function
(
result
)
{
return
{
meta
:
{
fromScript
:
true
,
canDelete
:
false
,
canSave
:
false
,
canStar
:
false
,
},
dashboard
:
result
.
data
,
};
},
function
(
err
)
{
console
.
log
(
'Script dashboard error '
+
err
);
this
.
$rootScope
.
appEvent
(
'alert-error'
,
[
'Script Error'
,
'Please make sure it exists and returns a valid dashboard'
,
]);
return
this
.
_dashboardLoadFailed
(
'Scripted dashboard'
);
}
);
}
_executeScript
(
result
)
{
var
services
=
{
dashboardSrv
:
this
.
dashboardSrv
,
datasourceSrv
:
this
.
datasourceSrv
,
$q
:
this
.
$q
,
};
/*jshint -W054 */
var
script_func
=
new
Function
(
'ARGS'
,
'kbn'
,
'dateMath'
,
'_'
,
'moment'
,
'window'
,
'document'
,
'$'
,
'jQuery'
,
'services'
,
result
.
data
);
var
script_result
=
script_func
(
this
.
$routeParams
,
kbn
,
dateMath
,
_
,
moment
,
window
,
document
,
$
,
$
,
services
);
// Handle async dashboard scripts
if
(
_
.
isFunction
(
script_result
))
{
var
deferred
=
this
.
$q
.
defer
();
script_result
(
dashboard
=>
{
this
.
$timeout
(()
=>
{
deferred
.
resolve
({
data
:
dashboard
});
});
});
return
deferred
.
promise
;
}
return
{
data
:
script_result
};
}
}
angular
.
module
(
'grafana.services'
).
service
(
'dashboardLoaderSrv'
,
DashboardLoaderSrv
);
public/app/features/dashboard/share
SnapshotCtrl.j
s
→
public/app/features/dashboard/share
_snapshot_ctrl.t
s
View file @
8fb0692d
define
([
'angular'
,
'lodash'
,
],
function
(
angular
,
_
)
{
'use strict'
;
var
module
=
angular
.
module
(
'grafana.controllers'
);
module
.
controller
(
'ShareSnapshotCtrl'
,
function
(
$scope
,
$rootScope
,
$location
,
backendSrv
,
$timeout
,
timeSrv
)
{
import
angular
from
'angular'
;
import
_
from
'lodash'
;
export
class
ShareSnapshotCtrl
{
constructor
(
$scope
,
$rootScope
,
$location
,
backendSrv
,
$timeout
,
timeSrv
)
{
$scope
.
snapshot
=
{
name
:
$scope
.
dashboard
.
title
,
expires
:
0
,
...
...
@@ -18,16 +12,16 @@ function (angular, _) {
$scope
.
step
=
1
;
$scope
.
expireOptions
=
[
{
text
:
'1 Hour'
,
value
:
60
*
60
},
{
text
:
'1 Day'
,
value
:
60
*
60
*
24
},
{
text
:
'7 Days'
,
value
:
60
*
60
*
24
*
7
},
{
text
:
'Never'
,
value
:
0
},
{
text
:
'1 Hour'
,
value
:
60
*
60
},
{
text
:
'1 Day'
,
value
:
60
*
60
*
24
},
{
text
:
'7 Days'
,
value
:
60
*
60
*
24
*
7
},
{
text
:
'Never'
,
value
:
0
},
];
$scope
.
accessOptions
=
[
{
text
:
'Anyone with the link'
,
value
:
1
},
{
text
:
'Organization users'
,
value
:
2
},
{
text
:
'Public on the web'
,
value
:
3
},
{
text
:
'Anyone with the link'
,
value
:
1
},
{
text
:
'Organization users'
,
value
:
2
},
{
text
:
'Public on the web'
,
value
:
3
},
];
$scope
.
init
=
function
()
{
...
...
@@ -42,7 +36,7 @@ function (angular, _) {
$scope
.
createSnapshot
=
function
(
external
)
{
$scope
.
dashboard
.
snapshot
=
{
timestamp
:
new
Date
()
timestamp
:
new
Date
()
,
};
if
(
!
external
)
{
...
...
@@ -71,29 +65,32 @@ function (angular, _) {
var
postUrl
=
external
?
$scope
.
externalUrl
+
$scope
.
apiUrl
:
$scope
.
apiUrl
;
backendSrv
.
post
(
postUrl
,
cmdData
).
then
(
function
(
results
)
{
$scope
.
loading
=
false
;
backendSrv
.
post
(
postUrl
,
cmdData
).
then
(
function
(
results
)
{
$scope
.
loading
=
false
;
if
(
external
)
{
$scope
.
deleteUrl
=
results
.
deleteUrl
;
$scope
.
snapshotUrl
=
results
.
url
;
$scope
.
saveExternalSnapshotRef
(
cmdData
,
results
);
}
else
{
var
url
=
$location
.
url
();
var
baseUrl
=
$location
.
absUrl
();
if
(
external
)
{
$scope
.
deleteUrl
=
results
.
deleteUrl
;
$scope
.
snapshotUrl
=
results
.
url
;
$scope
.
saveExternalSnapshotRef
(
cmdData
,
results
);
}
else
{
var
url
=
$location
.
url
();
var
baseUrl
=
$location
.
absUrl
();
if
(
url
!==
'/'
)
{
baseUrl
=
baseUrl
.
replace
(
url
,
''
)
+
'/'
;
}
if
(
url
!==
'/'
)
{
baseUrl
=
baseUrl
.
replace
(
url
,
''
)
+
'/'
;
$scope
.
snapshotUrl
=
baseUrl
+
'dashboard/snapshot/'
+
results
.
key
;
$scope
.
deleteUrl
=
baseUrl
+
'api/snapshots-delete/'
+
results
.
deleteKey
;
}
$scope
.
snapshotUrl
=
baseUrl
+
'dashboard/snapshot/'
+
results
.
key
;
$scope
.
deleteUrl
=
baseUrl
+
'api/snapshots-delete/'
+
results
.
deleteKey
;
$scope
.
step
=
2
;
},
function
()
{
$scope
.
loading
=
false
;
}
$scope
.
step
=
2
;
},
function
()
{
$scope
.
loading
=
false
;
});
);
};
$scope
.
getSnapshotUrl
=
function
()
{
...
...
@@ -116,21 +113,22 @@ function (angular, _) {
// remove annotation queries
dash
.
annotations
.
list
=
_
.
chain
(
dash
.
annotations
.
list
)
.
filter
(
function
(
annotation
)
{
return
annotation
.
enable
;
})
.
map
(
function
(
annotation
)
{
return
{
name
:
annotation
.
name
,
enable
:
annotation
.
enable
,
iconColor
:
annotation
.
iconColor
,
snapshotData
:
annotation
.
snapshotData
};
}).
value
();
.
filter
(
function
(
annotation
)
{
return
annotation
.
enable
;
})
.
map
(
function
(
annotation
)
{
return
{
name
:
annotation
.
name
,
enable
:
annotation
.
enable
,
iconColor
:
annotation
.
iconColor
,
snapshotData
:
annotation
.
snapshotData
,
};
})
.
value
();
// remove template queries
_
.
each
(
dash
.
templating
.
list
,
function
(
variable
)
{
variable
.
query
=
""
;
variable
.
query
=
''
;
variable
.
options
=
variable
.
current
;
variable
.
refresh
=
false
;
});
...
...
@@ -168,7 +166,7 @@ function (angular, _) {
cmdData
.
deleteKey
=
results
.
deleteKey
;
backendSrv
.
post
(
'/api/snapshots/'
,
cmdData
);
};
}
}
});
});
angular
.
module
(
'grafana.controllers'
).
controller
(
'ShareSnapshotCtrl'
,
ShareSnapshotCtrl
);
public/app/features/dashboard/specs/unsaved_changes_srv_specs.ts
View file @
8fb0692d
import
{
describe
,
beforeEach
,
it
,
expect
,
sinon
,
angularMocks
}
from
'test/lib/common'
;
import
'app/features/dashboard/unsavedChangesS
rv'
;
import
{
Tracker
}
from
'app/features/dashboard/unsaved_changes_s
rv'
;
import
'app/features/dashboard/dashboard_srv'
;
import
{
contextSrv
}
from
'app/core/core'
;
describe
(
'unsavedChangesSrv'
,
function
()
{
var
_unsavedChangesSrv
;
var
_dashboardSrv
;
var
_contextSrvStub
=
{
isEditor
:
true
};
var
_rootScope
;
var
_location
;
var
_timeout
;
var
_window
;
var
tracker
;
var
dash
;
var
scope
;
...
...
@@ -21,10 +24,12 @@ describe('unsavedChangesSrv', function() {
);
beforeEach
(
angularMocks
.
inject
(
function
(
unsavedChangesSrv
,
$location
,
$rootScope
,
dashboardSrv
)
{
_unsavedChangesSrv
=
unsavedChangesSrv
;
angularMocks
.
inject
(
function
(
$location
,
$rootScope
,
dashboardSrv
,
$timeout
,
$window
)
{
_dashboardSrv
=
dashboardSrv
;
_rootScope
=
$rootScope
;
_location
=
$location
;
_timeout
=
$timeout
;
_window
=
$window
;
})
);
...
...
@@ -42,7 +47,7 @@ describe('unsavedChangesSrv', function() {
scope
.
appEvent
=
sinon
.
spy
();
scope
.
onAppEvent
=
sinon
.
spy
();
tracker
=
new
_unsavedChangesSrv
.
Tracker
(
dash
,
s
cope
);
tracker
=
new
Tracker
(
dash
,
scope
,
undefined
,
_location
,
_window
,
_timeout
,
contextSrv
,
_rootS
cope
);
});
it
(
'No changes should not have changes'
,
function
()
{
...
...
public/app/features/dashboard/unsaved
ChangesSrv.j
s
→
public/app/features/dashboard/unsaved
_changes_srv.t
s
View file @
8fb0692d
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment