3 Min. Lesezeit
Unlimited JSM Lizenz? Wie man die echten Agenten für die passende Cloud- oder DC-Lizenz findet
Deniz : Jun 19, 2023 11:40:51 AM
Die Verwaltung von Benutzerlizenzen und die Bestimmung der Anzahl aktiver Agenten in Jira Service Management (JSM) ist von entscheidender Bedeutung, wenn Unternehmen in die Atlassian Cloud- oder das Data Center umsteigen, da die Abonnementkosten auf der Anzahl der Benutzer basieren - Die genaue Bestimmung der Benutzerzahl ist daher besonders wichtig. Um dieses Problem zu lösen, haben wir ein Groovy-Skript entwickelt, das Scriptrunner for Jira nutzt, um die Anzahl der aktiven JSM-Agenten in Deiner Organisation zu ermitteln.
Endecke wie dieses Skript funktioniert und wie es Dein User Management in Jira Service Management erleichtert.
The Code
Das vorliegende Groovy-Skript nutzt die offizielle Java-API von Jira, um das gleiche Ergebnis wie eine SQL-Anweisung zu erzielen. Der Code führt die folgenden Aktionen aus:
- Abrufen einer Sammlung aller aktiven Benutzer in der Gruppe "jira-servicedesk-users", die normalerweise aus JSM-Agenten besteht.
- Abrufen einer Liste der JSM-Projekte, die in Deiner Jira-Instanz vorhanden sind.
- Überprüfen, ob jeder Benutzer mindestens ein Ticket innerhalb eines JSM-Projekts bearbeitet hat.
- Zusammenstellen eine Liste der Benutzernamen, die die angegebenen Kriterien erfüllen.
Das folgende Groovy-Skript, das für die Verwendung mit Scriptrunner for Jira entwickelt wurde, verwendet die offizielle Java-API von Jira, um Dein User Management zu erleichtern.
Hier sind Deine Codes:
-
SQL Code
SELECT DISTINCT u.lower_user_name
FROM cwd_user u
JOIN cwd_membership m ON u.id = m.child_user_id
JOIN cwd_group g ON m.parent_id = g.id
JOIN app_user au ON u.lower_user_name = au.user_key
JOIN changegroup cg ON au.user_key = cg.author
JOIN jiraissue ji ON cg.issueid = ji.id
JOIN project p ON ji.project = p.id
JOIN nodeassociation na ON p.id = na.source_node_id
WHERE u.active = 'T'
AND g.lower_group_name = 'jira-servicedesk-users'
AND na.sink_node_entity = 'ProjectType'
AND na.sink_node_id = (SELECT id FROM projecttype WHERE "key"='service_desk
-
Groovy Code
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.history.ChangeItemBean
def groupManager = ComponentAccessor.getGroupManager()
def changeHistoryManager = ComponentAccessor.getChangeHistoryManager()
def projectManager = ComponentAccessor.getProjectManager()
// Holen Sie sich alle aktiven Benutzer in der Gruppe 'jira-servicedesk-users'
def users = ComponentAccessor.getUserManager().getUsersInGroup('jira-servicedesk-users').findAll { it.isActive() }
// Holen Sie sich alle JSM-Projekte
def jsmProjects = projectManager.getProjectObjects().findAll { it.projectTypeKey.key == 'service_desk' }
// Ergebnis
def result = []
users.each { user ->
def userHasEditedJSMIssue = jsmProjects.any { project ->
def issuesInProject = ComponentAccessor.getIssueManager().getIssueObjects(ComponentAccessor.getIssueManager().getIssueIdsForProject(project.id))
issuesInProject.any { issue ->
def changeItems = changeHistoryManager.getChangeItemsForField(issue, "*")
changeItems.any { ChangeItemBean changeItemBean ->
changeItemBean.getUserKey() == user.key
}
}
}
if (userHasEditedJSMIssue) {
result << user.name
}
}
return result
-
Code für Tickets, die innerhalt der letzten 3 Monate erstellt wurden
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.history.ChangeItemBean
def groupManager = ComponentAccessor.getGroupManager()
def changeHistoryManager = ComponentAccessor.getChangeHistoryManager()
def projectManager = ComponentAccessor.getProjectManager()
// Holen Sie sich alle aktiven Benutzer in der Gruppe 'jira-servicedesk-users'
def users = ComponentAccessor.getUserManager().getUsersInGroup('jira-servicedesk-users').findAll { it.isActive() }
// Holen Sie sich alle JSM-Projekte
def jsmProjects = projectManager.getProjectObjects().findAll { it.projectTypeKey.key == 'service_desk' }
// Zeitpunkt vor 3 Monaten
def threeMonthsAgo = new Date() - 3.months
// Ergebnis
def result = []
users.each { user ->
def userHasEditedJSMIssue = jsmProjects.any { project ->
def issuesInProject = ComponentAccessor.getIssueManager().getIssueObjects(ComponentAccessor.getIssueManager().getIssueIdsForProject(project.id))
issuesInProject.any { issue ->
def changeItems = changeHistoryManager.getChangeItemsForField(issue, "*")
changeItems.any { ChangeItemBean changeItemBean ->
changeItemBean.getUserKey() == user.key && issue.getCreated().after(threeMonthsAgo)
}
}
}
if (userHasEditedJSMIssue) {
result << user.name
}
}
return result
Wichtige Anmerkung
Obwohl das Skript unglaublich nützlich ist, sollten Du die folgenden Punkte beachten:
- Hohe Systembelastung: Wenn Du das Skript durch alle Projekte und Tickets laufen lässt, kann das System überlastet werden. Wir empfehlen dringend, das Skript in einer nicht produktiven Umgebung zu testen, bevor Du es in einer Live-Umgebung nutzt.
- Personalisierung: Je nach Anforderungen und Größe Deiner Jira-Instanz musst Du das Skript möglicherweise anpassen. Betrachte es als Grundlage, die Du an Deine spezifischen Anforderungen anpassen kannst.
Wie hilft mir das Skript?
Die Bestimmung der Anzahl aktiver JSM-Agenten ist eine wichtige Aufgabe bei der Verwaltung von Benutzerlizenzen in Jira Service Management. Unser Groovy-Skript bietet eine praktische Lösung für diese Herausforderung, vereinfacht die Benutzerverwaltung und erleichtert die Kostenberechnung für Cloud- oder Data Center Abonnements. Sei jedoch vorsichtig, wenn Du das Skript ausführst, und teste es immer in einer sicheren Umgebung, bevor Du es in der Live-Umgebung einsetzt.
Wenn Du Fragen hast oder weitere Anpassungen benötigst, zögere nicht Dich mit uns in Verbindung zu setzen. Wir helfen Dir gerne dabei, das Beste aus Jira Service Management herauszuholen und Deine Benutzerverwaltungsprozesse zu optimieren.
Mehr zu Jira Service Management und unseren Lizenzen:
Schulungen für Jira Service Management
Atlassian Enterprise License Agreement (ELA)