Skip to content

Commit 4ee1d7d

Browse files
committed
Add option to provide list of Device Profile IDs.
1 parent 972d891 commit 4ee1d7d

File tree

2 files changed

+87
-42
lines changed

2 files changed

+87
-42
lines changed

README.md

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,22 @@ Usage:
1111
chirpstack-v3-to-v4 [flags]
1212
1313
Flags:
14-
--as-config-file string Path to chirpstack-application-server.toml configuration file
15-
--cs-config-file string Path to chirpstack.toml configuration file
16-
--device-session-ttl-days int Device-session TTL in days (default 31)
17-
--drop-tenants-and-users Drop tenants and users before migration
18-
-h, --help help for chirpstack-v3-to-v4
19-
--migrate-applications Migrate applications (default true)
20-
--migrate-device-metrics Migrate device metrics (default true)
21-
--migrate-device-profiles Migrate device profiles (default true)
22-
--migrate-devices Migrate devices (default true)
23-
--migrate-gateway-metrics Migrate gateway metrics (default true)
24-
--migrate-gateways Migrate gateways (default true)
25-
--migrate-tenants Migrate tenants (default true)
26-
--migrate-users Migrate users (default true)
27-
--ns-config-file stringArray Path to chirpstack-network-server.toml configuration file (can be repeated)
14+
--as-config-file string Path to chirpstack-application-server.toml configuration file
15+
--cs-config-file string Path to chirpstack.toml configuration file
16+
--deveui-list-file string Path to file containing DevEUIs to migrate (one DevEUI per line)
17+
--device-profile-id-list-file string Path to file containing list of Device Profile IDs to migrate (one per line)
18+
--device-session-ttl-days int Device-session TTL in days (default 31)
19+
--drop-tenants-and-users Drop tenants and users before migration
20+
-h, --help help for chirpstack-v3-to-v4
21+
--migrate-applications Migrate applications (default true)
22+
--migrate-device-metrics Migrate device metrics (default true)
23+
--migrate-device-profiles Migrate device profiles (default true)
24+
--migrate-devices Migrate devices (default true)
25+
--migrate-gateway-metrics Migrate gateway metrics (default true)
26+
--migrate-gateways Migrate gateways (default true)
27+
--migrate-tenants Migrate tenants (default true)
28+
--migrate-users Migrate users (default true)
29+
--ns-config-file stringArray Path to chirpstack-network-server.toml configuration file (can be repeated)
2830
```
2931

3032
Usage example:

main.go

Lines changed: 71 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -29,32 +29,38 @@ import (
2929
"google.golang.org/protobuf/proto"
3030
)
3131

32-
var asConfigFile string
33-
var csConfigFile string
34-
var nsConfigFiles []string
35-
var devEUIListFile string
36-
var csSessionTTL int
37-
var dropTenantAndUsers bool
38-
var migrateUsers bool
39-
var migrateTenants bool
40-
var migrateApplications bool
41-
var migrateGateways bool
42-
var migrateDeviceProfiles bool
43-
var migrateDevices bool
44-
var migrateGatewayMetrics bool
45-
var migrateDeviceMetrics bool
32+
// CLI parameters
33+
var (
34+
asConfigFile string
35+
csConfigFile string
36+
nsConfigFiles []string
37+
deviceProfileIDListFile string
38+
devEUIListFile string
39+
csSessionTTL int
40+
dropTenantAndUsers bool
41+
migrateUsers bool
42+
migrateTenants bool
43+
migrateApplications bool
44+
migrateGateways bool
45+
migrateDeviceProfiles bool
46+
migrateDevices bool
47+
migrateGatewayMetrics bool
48+
migrateDeviceMetrics bool
49+
)
4650

51+
// Internal state
4752
var (
48-
nsDB *sqlx.DB
49-
asDB *sqlx.DB
50-
csDB *sqlx.DB
51-
nsRedis redis.UniversalClient
52-
asRedis redis.UniversalClient
53-
csRedis redis.UniversalClient
54-
nsPrefix string
55-
asPrefix string
56-
csPrefix string
57-
devEUIsList [][]byte
53+
nsDB *sqlx.DB
54+
asDB *sqlx.DB
55+
csDB *sqlx.DB
56+
nsRedis redis.UniversalClient
57+
asRedis redis.UniversalClient
58+
csRedis redis.UniversalClient
59+
nsPrefix string
60+
asPrefix string
61+
csPrefix string
62+
devEUIsList [][]byte
63+
deviceProfileIDList []uuid.UUID
5864
)
5965

6066
var rootCmd = &cobra.Command{
@@ -85,6 +91,7 @@ func init() {
8591
rootCmd.PersistentFlags().StringVarP(&asConfigFile, "as-config-file", "", "", "Path to chirpstack-application-server.toml configuration file")
8692
rootCmd.PersistentFlags().StringArrayVarP(&nsConfigFiles, "ns-config-file", "", []string{}, "Path to chirpstack-network-server.toml configuration file (can be repeated)")
8793
rootCmd.PersistentFlags().StringVarP(&devEUIListFile, "deveui-list-file", "", "", "Path to file containing DevEUIs to migrate (one DevEUI per line)")
94+
rootCmd.PersistentFlags().StringVarP(&deviceProfileIDListFile, "device-profile-id-list-file", "", "", "Path to file containing list of Device Profile IDs to migrate (one per line)")
8895
rootCmd.PersistentFlags().IntVarP(&csSessionTTL, "device-session-ttl-days", "", 31, "Device-session TTL in days")
8996
rootCmd.PersistentFlags().BoolVarP(&dropTenantAndUsers, "drop-tenants-and-users", "", false, "Drop tenants and users before migration")
9097
rootCmd.PersistentFlags().BoolVarP(&migrateUsers, "migrate-users", "", true, "Migrate users")
@@ -151,6 +158,35 @@ func run(cmd *cobra.Command, args []string) error {
151158
}
152159
}
153160

161+
if deviceProfileIDListFile != "" {
162+
log.Printf("Reading Device Profile ID list file: %s", deviceProfileIDListFile)
163+
file, err := os.Open(deviceProfileIDListFile)
164+
if err != nil {
165+
log.Fatalf("Open Device Profile ID list file error: %s", err)
166+
}
167+
defer file.Close()
168+
169+
reader := bufio.NewReader(file)
170+
for {
171+
line, err := reader.ReadString('\n')
172+
if err != nil {
173+
break
174+
}
175+
176+
line = strings.TrimRight(line, "\n")
177+
if len(line) == 0 {
178+
continue
179+
}
180+
181+
var id uuid.UUID
182+
if err := id.UnmarshalText([]byte(line)); err != nil {
183+
log.Fatalf("Invalid Device Profile ID: '%s'", line)
184+
}
185+
186+
deviceProfileIDList = append(deviceProfileIDList, id)
187+
}
188+
}
189+
154190
log.Println("Start migration")
155191

156192
if dropTenantAndUsers {
@@ -1165,17 +1201,24 @@ func migrateDeviceProfilesFn() {
11651201
nsDevProfiles := []NSDeviceProfile{}
11661202
asDevProfiles := []ASDeviceProfile{}
11671203

1168-
err := nsDB.Select(&nsDevProfiles, "select * from device_profile")
1169-
if err != nil {
1170-
log.Fatal("Select device profiles error", err)
1204+
if len(deviceProfileIDList) == 0 {
1205+
err := nsDB.Select(&nsDevProfiles, "select * from device_profile")
1206+
if err != nil {
1207+
log.Fatal("Select device profiles error", err)
1208+
}
1209+
} else {
1210+
err := nsDB.Select(&nsDevProfiles, "select * from device_profile where device_profile_id = any($1)", pq.Array(deviceProfileIDList))
1211+
if err != nil {
1212+
log.Fatal("Select device profiles error", err)
1213+
}
11711214
}
11721215

11731216
var devProfileIDs []uuid.UUID
11741217
for i := range nsDevProfiles {
11751218
devProfileIDs = append(devProfileIDs, nsDevProfiles[i].ID)
11761219
}
11771220

1178-
err = asDB.Select(&asDevProfiles, "select * from device_profile where device_profile_id = any($1)", pq.Array((devProfileIDs)))
1221+
err := asDB.Select(&asDevProfiles, "select * from device_profile where device_profile_id = any($1)", pq.Array((devProfileIDs)))
11791222
if err != nil {
11801223
log.Fatal("Select device profiles error", err)
11811224
}

0 commit comments

Comments
 (0)