garysharp / disco Goto Github PK
View Code? Open in Web Editor NEWDisco ICT Management
License: GNU Affero General Public License v3.0
Disco ICT Management
License: GNU Affero General Public License v3.0
Use Livestamp in UI (Integrate with FriendlyDate
common helpers).
Would be nice to configure this behaviour so a device can be assigned without the user being made an admin - maybe power user?
Investigation is required for a User Helpdesk. This might include features like:
Documentation is required for:
See:
http://discoict.com.au/forum/feature-requests/2012/11/staff-and-student-helpdesk.aspx
Improve the Active Directory integration to:
Use Markdown to allow for more expression when writing notes.
Firstly, new Job Sub-Types under the "Hardware – Non-Warranty" type to provide more information than the existing 'Replacement Device' type. These new sub-types would be:
Secondly, an extra field for Devices to complement 'DecommissionedDate' – perhaps 'DecommissionedReason.'
So that metrics could be collected, this field would map to a well-defined list (as is the case with job types/sub-types). When decommissioning a device, a drop-down-list would ask for the reason. That list would be:
Current thinking is that 'End of Life' would be the default – and would be entered for all previously-decommissioned devices during database migration when the field is added.
See:
http://discoict.com.au/forum/feature-requests/2012/12/decommission-reasons.aspx
There is a typo in the default string in the Computer Name Template Expression field. It shows with 2x single quote marks either side of the hyphen, rather than 1x single quote.
DeviceProfile.ShortName + ''-'' + SerialNumber
It should read:
DeviceProfile.ShortName + '-' + SerialNumber
With the 2x single quote marks, and Enforce Naming Convention ticked, you will get errors during enrolment of devices as follows:
23/01/2014 12:25 50 DeviceEnrolment Device Enrolment 400 Client Error 2 IP: 10.141.181.185; Device ID: 34804191; Version: Disco-Client/1.2.1128 Error: The remote server returned an error: (500) Internal Server Error. 10.141.181.185 34804191 Disco-Client/1.2.1128 The remote server returned an error: (500) Internal Server Error. {'ClassName':'System.Net.WebException','Message':'The remote server returned an error: (500) Internal Server Error.','Data':null,'InnerException':null,'HelpURL':null,'StackTraceString':' at System.Net.HttpWebRequest.GetResponse()\r\n at Disco.Client.Extensions.ClientServicesExtensions.Post[ResponseType](ServiceBase1 Service, Boolean Authenticated)\r\n at Disco.Client.Program.Enrol()','RemoteStackTraceString':null,'RemoteStackIndex':0,'ExceptionMethod':'8\nGetResponse\nSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\nSystem.Net.HttpWebRequest\nSystem.Net.WebResponse GetResponse()','HResult':-2146233079,'Source':'System','WatsonBuckets':null} 23/01/2014 12:25 0 System Core System Log 11 Exception with Inner Exception 2 "Global Application Exception Caught; InvalidOperationException: An error occurred rendering the computer name: [InvalidOperationException] Expression evaluation resulted in an error; at Disco.BI.DeviceBI.DeviceEnrol.Enrol(DiscoDataContext Database, String Username, Enrol Request) at Disco.BI.Extensions.ClientServicesExtensions.BuildResponse(Enrol request) at Disco.Web.Areas.Services.Controllers.ClientController.Authenticated(String feature) at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary
2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously); SyntaxErrorException: Syntax Error on line 1, column 29: unexpected token: ['_',<33>,line=1,col=29] in expression 'DeviceProfile.ShortName + ''_'' + '9999''; at Disco.BI.Expressions.EvaluateExpressionPart.Disco.BI.Expressions.IExpressionPart.Evaluate(Object ExpressionContext, IDictionary Variables) at Disco.BI.Expressions.Expression.EvaluateFirst[T](Object ExpressionContext, IDictionary Variables)" Global Application Exception Caught InvalidOperationException An error occurred rendering the computer name: [InvalidOperationException] Expression evaluation resulted in an error " at Disco.BI.DeviceBI.DeviceEnrol.Enrol(DiscoDataContext Database, String Username, Enrol Request) at Disco.BI.Extensions.ClientServicesExtensions.BuildResponse(Enrol request) at Disco.Web.Areas.Services.Controllers.ClientController.Authenticated(String feature) at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary
2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.b__33()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.b__49()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.b__49()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.b__36(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.b__20()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.b__22(IAsyncResult asyncResult)
at System.Web.Mvc.Controller.<>c__DisplayClass1d.b__18(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.b__3(IAsyncResult ar)
at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.b__3(IAsyncResult ar)
at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.b__3(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.b__3(IAsyncResult ar)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)" SyntaxErrorException "Syntax Error on line 1, column 29: unexpected token: ['',<33>,line=1,col=29] in expression
'DeviceProfile.ShortName + '''' + '9999''" " at Disco.BI.Expressions.EvaluateExpressionPart.Disco.BI.Expressions.IExpressionPart.Evaluate(Object ExpressionContext, IDictionary Variables)
at Disco.BI.Expressions.Expression.EvaluateFirst[T](Object ExpressionContext, IDictionary Variables)"
23/01/2014 12:25 50 DeviceEnrolment Device Enrolment 20 Session Finished 0 Finished Session# {c0a41061-dc03-453c-ab12-c4221f20adf6} {c0a41061-dc03-453c-ab12-c4221f20adf6}
23/01/2014 12:25 50 DeviceEnrolment Device Enrolment 24 Session Error with Internal 2 "An Error Occurred: [InvalidOperationException] An error occurred rendering the computer name: [InvalidOperationException] Expression evaluation resulted in an error; Internal Error: [SyntaxErrorException] Syntax Error on line 1, column 29: unexpected token: ['',<33>,line=1,col=29] in expression
'DeviceProfile.ShortName + '''' + '9999''" {c0a41061-dc03-453c-ab12-c4221f20adf6} InvalidOperationException An error occurred rendering the computer name: [InvalidOperationException] Expression evaluation resulted in an error SyntaxErrorException "Syntax Error on line 1, column 29: unexpected token: ['',<33>,line=1,col=29] in expression
'DeviceProfile.ShortName + '''' + '9999''" " at Disco.BI.Extensions.DeviceExtensions.ComputerNameRender(Device device, DiscoDataContext Database)
at Disco.BI.DeviceBI.DeviceEnrol.Enrol(DiscoDataContext Database, String Username, Enrol Request)" " at Disco.BI.Expressions.EvaluateExpressionPart.Disco.BI.Expressions.IExpressionPart.Evaluate(Object ExpressionContext, IDictionary Variables)
at Disco.BI.Expressions.Expression.EvaluateFirst[T](Object ExpressionContext, IDictionary Variables)"
23/01/2014 12:25 50 DeviceEnrolment Device Enrolment 12 Session Device 0 {c0a41061-dc03-453c-ab12-c4221f20adf6}, 34804191, 23 {c0a41061-dc03-453c-ab12-c4221f20adf6} 34804191 23
23/01/2014 12:25 50 DeviceEnrolment Device Enrolment 51 Task - Updating Device 0 Updating Disco Device 34804191 {c0a41061-dc03-453c-ab12-c4221f20adf6} 34804191
23/01/2014 12:25 50 DeviceEnrolment Device Enrolment 13 Session Device Info 0 {c0a41061-dc03-453c-ab12-c4221f20adf6}, 34804191, 63D8CCA6-3E20-E311-A833-201A064AED41, C-201A064AED41, 20:1A:06:4A:ED:41, B4:B6:76:D4:06:9D, Acer, TravelMate B113, Mobile {c0a41061-dc03-453c-ab12-c4221f20adf6} 34804191 63D8CCA6-3E20-E311-A833-201A064AED41 C-201A064AED41 20:1A:06:4A:ED:41 B4:B6:76:D4:06:9D Acer TravelMate B113 Mobile
23/01/2014 12:25 50 DeviceEnrolment Device Enrolment 10 Session Starting 0 Starting 'Normal' Enrolment for 34804191 (Session# {c0a41061-dc03-453c-ab12-c4221f20adf6}) {c0a41061-dc03-453c-ab12-c4221f20adf6} 34804191 Normal
I've observed this on 3 of my sites so far, but has not caused an issue since I've pre-imported machines previously using other profiles.
Binding Redirects need to be added to web.config
for third-party Strongly-Named Assemblies. Plugins may fail to compile against future releases of Disco due to strongly-named assemblies requiring exact version matches.
Provide the ability to enter a list of device locations.
See:
http://discoict.com.au/forum/feature-requests/2013/8/locations.aspx
In a Job page, once you click the link to open the prompt to Upload an attachment or Capture a webcam photo - it will only open up that first link for both buttons (eg, the link doesn't change to the correct destination if you close one prompt and go to the other one)
Only devices which have enrolled, not decommissioned, domain joined and on-site in the last 60 days are reported. This should reflect all devices which are not decommissioned. This allows for organisations which don't domain-join their devices.
We would like to add accessories or peripherals like detachable keyboards, bags, spare battery,..for each device so we know what sort of devices a user has got and can associate them with their devices.
This feature would aim to improve data consistancy in Disco.
See:
http://discoict.com.au/forum/feature-requests/2012/12/document-template-to-list-exited-students.aspx
Marc Veenstra:
https://discoict.com.au/forum/feature-requests/2013/11/flag-users-who-cannot-receive-a-device.aspx
We are starting to accumulate a list of jobs where a student has an outstanding charge. Some of these go back a long time. It would be nice to flag the student and then close the long running job along with unassigning the device from the user. My idea is that the charge remains on CASES but it written off as a bad debt in Disco. Since the student is flagged if they return and want a device Disco will say NO! This would prevent a Trainee or 'couldn't care' tech from assigning a device to them until the flag is removed (ie. they pay their debt).
During enrolment the device submits 1 LAN and 1 WAN MAC address. This information is logged, but should also be stored in the database. Either in new columns of the Devices
table, or as records in the DeviceDetails
table.
The database migration could also enumerate historical logs to retrieve this information where previously collected.
SEE: http://discoict.com.au/forum/feature-requests/2013/9/automatically-set-trust-enrol-setting.aspx
When a "Software - Reimage" job is created, automatically allow for an unauthenticated enrolment.
For security reasons, this would be a profile option ( disabled by default ) so that the Disco Admin would need to explicitly indicate this behaviour is required.
Behaviour:
Investigate collection of unhandled exceptions to identity bugs. Possibly using https://github.com/exceptionless/Exceptionless
Replace existing Silverlight-based file-upload plugin with HTML File API.
From @08263504: https://www.discoict.com.au/forum/feature-requests/2014/2/stale-jobs.aspx
We currently have a display of long running jobs. Can we also get a display of 'stale' jobs, ie jobs that haven't been touched for a specified period of time. I can have a job that runs for months because of factors beyond our control, but it is regularly updated with new information. This is less of a concern than a job opened 2 weeks ago but not acted on since. So a slight difference between 'long running' and 'stale'.
Update any existing Authorization Roles with new Claims based on similar (existing) permissions.
Only the database is updated when a Device Profile's Computer Name Template property changes. The cache item should also be flushed so the new template is used.
When creating a new Hardware Non-Warranty
job:
Components are included if they are Generic Components or are associated with the devices' model. If the component contains a Job Type Filter
the job type must be present in the job; if no filter is present the component is always added.
When converting a Hardware Warranty
job:
All Generic Components are added. Device model components with a Job Type Filter
are added - and only if the filter matches a job type. Devices model components without a Job Type Filter
are never added.
When a Hardware - Warranty
is converted to Hardware - Non Warranty
components should be added automatically in the same way as when creating a new Hardware - Non Warranty
job.
Live Updates occur for Job Logs and Attachments, this same functionality should exist for User and Device Attachments also.
Current releases of Chrome & Firefox support WebRTC. Use WebRTC to upload web-cam images rather than using plugins (currently Silverlight).
Investigate a flash-based shim for browsers which don't yet support WebRTC (read: Internet Explorer)
Make the time for when a job classed as long running configurable
In some environments, Disco isn't installed/managed by Domain Admins
. During the Initial Configuration Disco should ask which users should be considered 'Admins'.
In the past, this was achieved with an AD security group (Disco Admins
) - using a security group with this name is still supported in the codebase, but it is recommended to use an Authorization Group instead.
This should also be configurable after the Initial Configuration (From: Configuration > Authorization Roles).
It would be handy to have the ability to selectively export device information, and also be able to select the columns for WLAN/LAN MAC address and AC Adapter serial.
Currently the detection method only uses the memberOf
attribute - which excludes the Primary Group (Domain Users
by default).
This has caused issues for users who have changed their Primary Group to Domain Admins
- which has caused confusion as to why Disco refuses them access.
Provide the ability to store the AC Adapter's serial number belonging to a device.
This information could be stored in the DeviceDetails table. Where the UI for this belongs is open for discussion.
See:
http://discoict.com.au/forum/feature-requests/2013/1/ac-adapter-sn.aspx
We use barcodes for student code, serial, etc. they are printed on our job sheet which gets printed for each device once a job is created. It would be good if we could have shorcut codes or something so that you could place barcodes on job sheets that when scanned automatically marks a device as returned and closes the job. you could have different barcodes for different reasons. one might just be to mark a job as ready to collect. this could be done by codes a barcode could look like this:
^011234
Where:
^ could tell disco that its a code
01 could be mark job as ready to collect
1234 is job number
The Client Bootstrapper has hard dependancies on components not available on the Windows Server SKUs.
These dependancies should be removed or detected when available.
See:
http://discoict.com.au/forum/feature-requests/2012/12/broader-client-support.aspx
and
http://discoict.com.au/forum/support/device-enrolment-bootstrapper/2013/3/error-wlanapidll-missing-.aspx
Provide the ability to associate an Active Directory security group with:
As devices/users are associated with these groups, Active Directory should be updated accordingly (where possible). A nightly sync should also run to ensure these groups match information in Disco.
This will allow for integration with other systems which are compatible with Active Directory. For example, a security group for 'Banned Internet Users' (enforced by a proxy/firewall) could be associated with a Disco User Flag.
When attempting to repair Disco, the installer is reported to throw this error:
Disco ICT Management cannot be installed on systems with .NET Framework version lower than 4.5
See: https://www.discoict.com.au/forum/feedback/2013/11/upgrade-woes.aspx
discoict.com.au supports HTTPS. This protocol should be used whenever Disco implementations communicate with the community site.
Just a thought about the bootstrapper, there have been countless times where the bootstrapper has run and someones forgot to assign a user, etc.
it could be good to have almost an 'advanced bootstrapper' where you could for example hold down the shift key while the bootstrapper starts up and have options to assign a user, trust enrollment, add asset number, etc. obviously there could be security concerns so maybe an option could be that when using advanced options an admin has to type in their password.
Currently pdf's are only detected correctly when printed then scanned in. This was designed this way to allow for signature collections on forms.
Schools are trying to attempt to move away from printing so much paper.
Having the added functionality of being able to imp
ort pdfs that are generated by Disco then sent and filled in electronically and then imported again without printing the document.
Currently when you import a document this is how it is detected
The desired behaviour would be like scanned pdf detection being automatically assigned to correct location i.e. to a user or device
An example of a document not scanned just directly imported after generating
Would love the ability to bulk import additional device details such as AC Adapter serial. I found that entering this information very time consuming due to the process of getting to the fields within the gui.
This feature would include the ability to decommission all devices in a batch.
See:
http://discoict.com.au/forum/feature-requests/2012/11/batch-decomission.aspx
Not much documentation on how to bulk generate documents.
In the same way that Warranty jobs have an integrated submission process, Non-Warranty jobs should be able to submit repairs and insurance claims via plugins.
http://ibroker.net.au/ integration in particular has been requested.
See:
http://discoict.com.au/forum/feature-requests/2012/11/ibroker-claim-plugin.aspx
insurance claim integration has been moved to #57 and a future release
From Conor:
it seems that when using firefox to try to add a component to a device model (Config, Device Models, select model, Add Component) it doesnt seem to be running the (javascript or ajax) correctly. this means that while i can add a component it doesnt save, doesnt recognise the price and convert to $ and cant select a job type.
I have test the same process using IE10 and it works fine, but using Firefox 22 or 23 doesnt work. other areas within disco that use the 'hot save' are working fine so dont think its something specific firefox, just that particular section. also note that other areas on the Device Model page work fine with regards to changes and saving, jus the component section isnt working.
Possibly remove transparency of drop-down menu.
See:
http://discoict.com.au/forum/feature-requests/2012/12/jobs-drop-down-menu.aspx
When errors occur during a System Audit (eg. No serial number), the following error occurs:
The type initializer for 'Disco.Client.Interop.SystemAudit' threw an exception.
The underlying exception does contain more useful information but is hidden by the type initializer error - this should be corrected.
A base WebViewPage (In the Disco.Services.Plugins
namespace) would allow easier access to Disco-based functionality in plugin views. For example:
If migrating Disco onto a new server, where the drive letter that previously stored the Data Store doesn't exist, the Initial Configuration crashes with:
Description:
An unhandled exception has occurred.
Exception type: ArgumentNullException
Exception message: Value cannot be null. Parameter name: path1
at System.IO.Path.Combine(String path1, String path2)
at Disco.Web.Models.InitialConfig.FileStoreModel.ExpandDirectoryModel()
at Disco.Web.Controllers.InitialConfigController.FileStore()
ExpandDirectoryModel
should not fail in this scenario. If the drive letter is not found, the rest of the path processing should be aborted.
Any Active Directory User or Group can be assigned permissions to access components of Disco.
Permissions are granular to meet the needs of many different ‘Roles’ Disco Users might have.
Disco current requires the Primary AD Domain Controller for all interaction with AD. This was originally added to fix issues occuring with the delays of data replication between DCs.
See:
http://discoict.com.au/forum/feature-requests/2013/5/secondary-dc.aspx
Disco should force a refresh of the Active Directory User when submitting a warranty job before passing the User information to the warranty plugin.
This will avoid a common problem where plugins require user's email/phone numbers and this information needs to be edited in AD.
See:
http://www.discoict.com.au/forum/support/plugins/2013/8/nn-plugin-asking-for-users-phone-number.aspx
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.