Skip to content

Instantly share code, notes, and snippets.

@lonniev
lonniev / supportTicketsFor.py
Created January 7, 2025 00:01
Use python with JIRA APIs to find the Jira issues for an Organization that you touched over a time range.
from itertools import compress
from jira import JIRA
import json
import keyring
import argparse
import os
from dateutil import parser
from datetime import datetime
import pytz
from tzlocal import get_localzone
@lonniev
lonniev / meetingsWith.py
Created January 6, 2025 21:23
Use python with Google Calendar APIs to find out when you met or are meeting with particular people over time.
import argparse
import os
import sys
import re
import json
from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials
from google.auth.transport.requests import Request
from google_auth_oauthlib.flow import InstalledAppFlow
from dateutil import parser
@lonniev
lonniev / MagicDrawResetTextToPlainText.groovy
Created January 3, 2025 17:16
A simple groovy script for MagicDraw StructuredExpressions that will replace any HTML Text tag value with suitable Plaintext
import com.nomagic.uml2.ext.magicdraw.classes.mdkernel.Element
import com.nomagic.uml2.ext.magicdraw.mdprofiles.Stereotype
import com.nomagic.uml2.ext.jmi.helpers.StereotypesHelper
import com.nomagic.magicdraw.core.Application
import com.nomagic.magicdraw.openapi.uml.SessionManager
def elided = { str ->
if (str.length() > 20) {
return str[0..9] + '...' + str[-10..-1]
}
@lonniev
lonniev / JiraServiceDeskCustomersAsJson.ipynb
Last active June 30, 2023 15:16
Extract from Jira Service Desk a complete set of Customer Names and Emails in JSON format
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@lonniev
lonniev / GremlinGroovyRequirementsReposSizesQuery.groovy
Last active September 22, 2022 17:59
Perform a Gremlin Query that asks Syndeia for all known and online Repositories which hold any kind of Requirement and then retrieve the current count of artifacts within the projects of that repository and rank order the resulting set
g.V().has( 'ArtifactType', 'sLabel', 'ArtifactType' )
.match(
__.as( 'at' ).has( 'name' ).filter{ it.get().value('name') ==~ /(?i).*?requirement.*/ },
__.as( 'at' ).out( 'ownedBy' ).as( 'or' ),
__.as( 'or' ).in( 'ownedBy' ).hasLabel( 'Container' ).as( 'c' ),
__.as( 'or' ).has( 'externalId' ).filter{
it.get().value( 'externalId' ).contains( 'http' ) }.filter{
{ u -> try { headRequest = new URL( u ).openConnection(); headRequest.setConnectTimeout( 1000 ); headRequest.setRequestMethod( "HEAD" ); return headRequest.getResponseCode() in [ 200, 401 ] } catch (e) { return false } }( it.get().value( 'externalId' ) ) },
__.as( 'or' ).out( 'hasType' ).as( 'rt' )
)
@lonniev
lonniev / GremlinGroovyRequirementLikeWithSysML.groovy
Created September 2, 2022 21:26
Perform a Gremlin Query that finds Artifacts in the graph g of requirement-like type that are within DNG Repositories and have a thread to a SysML Requirement
g.V().match(
__.as( 'dngRepoType' ).has( 'RepositoryType', 'name', 'DOORS-NG Repository Type' ),
__.as( 'dngRepoType' ).in( 'hasType' ).hasLabel( 'Repository' ).as( 'dngRepo' ),
__.as( 'dngRepo' ).in( 'ownedBy' ).hasLabel( 'ArtifactType' )
.filter{ it.get().value('name') ==~ /(?i).*?requirement.*/ }.as( 'dngReqType' ),
__.as( 'dngReqType' ).in( 'hasType' ).hasLabel( 'Artifact' ).as( 'dng' ),
__.as( 'dng' ).both( 'Relation' ).hasLabel( 'Artifact' ).has( 'type' ).as( 'sysML' ),
__.as( 'sysML' ).out( 'hasType' ).hasLabel( 'ArtifactType' )
.filter{ it.get().value('name') ==~ /(?i).*?requirement.*/ }.as( 'sysMLtype' ),
__.as( 'sysMLtype' ).out( 'ownedBy' ).as( 'sysMLrepo' ),
@lonniev
lonniev / GremlinGroovyCountOfTypesInThread.groovy
Created September 2, 2022 21:21
Perform a Gremlin Query that counts within a Digital Thread the kinds of Types therein
g.E().has( 'Relation', 'container', 'Drone-006' ).bothV().dedup()
.where( and(
out( 'hasType' ),
out( 'ownedBy' ).or(
has( 'name', 'DronesFlow' ),
has( 'name', 'Drone_MDO_With_Mid_Fid_Aero' ),
has( 'name', 'Esteco_Drone03-StructureAndParametrics_a' ) ) ) )
.group().by( out( 'hasType' ).values( 'name' ) ).by( count() )
@lonniev
lonniev / GremlinGroovyWhoWhenQuery.groovy
Last active November 25, 2022 21:38
Perform a Gremlin Query that looks up who changed a particular thread and when
userName = { u,t -> userGet = new URL( "http://syndeia.company.com:9000/users/${u}" ).openConnection(); userGet.setRequestProperty( "Accept", "application/json" ); userGet.setRequestProperty( "X-Auth-Token", t ); userGet.getResponseCode(); j = new groovy.json.JsonSlurper().parseText( userGet.getInputStream().getText() ); j.resources.name }
signInToken = { -> signInPost = new URL( "http://syndeia.company.com:9000/signIn" ).openConnection(); message = '{ "username": "[email protected]", "password": "pass-phrase", "rememberMe": false }'; signInPost.setDoOutput( true ); signInPost.setRequestProperty( "Content-Type", "application/json" ); signInPost.getOutputStream().write( message.getBytes( "UTF-8" ) ); signInPost.getResponseCode(); j = new groovy.json.JsonSlurper().parseText( signInPost.getInputStream().getText() ); j.resources.token }
g.E().has( 'Relation', 'container', 'DZSB19' )
.group()
.by( values( 'modifiedDate' )
.map{ ( LocalDateTime.parse( it.get(), java.time.format.DateTimeFormatter.IS
@lonniev
lonniev / GremlinGroovyPartsRequirementsQuery.groovy
Created September 1, 2022 12:22
Perform a Gremlin Query that finds Parts that have related Requirements and which groups by the Part
g.V().has( 'ArtifactType', 'name', 'Part' )
.match(
__.as( 't' ).in( 'hasType' ).as( 'p' ),
__.as( 't' ).out( 'ownedBy' ).as( 'r' ),
__.as( 'r' ).out( 'hasType' ).filter{ it.get().value( 'name' ).contains( 'Windchill' ) }.as( 'rt' ),
__.as( 'p' ).both( 'Relation' ).as( 'o' ),
__.as( 'o' ).out( 'hasType' ).filter{ it.get().value( 'name' ) ==~ /(?i).*?((requirement)|(task)).*/ }
)
.group()
.by( select( 'p' ) ).unfold().project( 'part', 'requirements' )
@lonniev
lonniev / GrelimGroovyQueryWithJiraDetails.groovy
Last active September 1, 2022 12:15
Perform a Gremlin Query that retrieves Jira Detail
reqPriority = { r,e -> reqPost = new URL( "http://some.host.com:9000/external/jira/${r}/artifacts/external/id?includeAttributes=priority" ).openConnection(); reqPost.setRequestProperty( "Content-Type", "application/json" ); reqPost.setRequestProperty( "Accept", "application/json" ); reqPost.setRequestProperty( "Ext-Auth-Token", "SOMETOKEN" ); reqPost.setRequestProperty( "User-Id", "SOMEUSER" ); reqPost.setDoOutput( true ); message = /{ "externalId": "${e}" }/; reqPost.getOutputStream().write( message.getBytes( "UTF-8" ) ); reqPost.getResponseCode(); j = new groovy.json.JsonSlurper().parseText( reqPost.getInputStream().getText() ); j.resources.attributes.priority.get( 'name' ) }
g.V().has( 'ArtifactType', 'name', 'Story' ).where( out( 'ownedBy' ).filter{ it -> it.get().value( 'name' ).contains( "Intercax" ) }.out( 'hasType' ).has( 'name', "JIRA Repository Type" ) ).in( 'hasType' ).limit( 1 ).as( 'e' ).out( 'ownedBy' ).out( 'ownedBy' ).as( 'r' ).select( 'r', 'e' ).by( 'sKey' ).by( 'externalId' ).map { it -> re