• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

yast / yast-kdump / 9596976870

20 Jun 2024 11:57AM UTC coverage: 40.31% (+0.2%) from 40.099%
9596976870

push

github

imobachgs
Automatic Rubocop fixes

17 of 118 new or added lines in 4 files covered. (14.41%)

20 existing lines in 4 files now uncovered.

728 of 1806 relevant lines covered (40.31%)

4.01 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

11.94
/src/include/kdump/uifunctions.rb
1
# ------------------------------------------------------------------------------
2
# Copyright (c) 2006 Novell, Inc. All Rights Reserved.
3
#
4
#
5
# This program is free software; you can redistribute it and/or modify it under
6
# the terms of version 2 of the GNU General Public License as published by the
7
# Free Software Foundation.
8
#
9
# This program is distributed in the hope that it will be useful, but WITHOUT
10
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License along with
14
# this program; if not, contact Novell, Inc.
15
#
16
# To contact Novell about this file by physical or electronic mail, you may find
17
# current contact information at www.novell.com.
18
# ------------------------------------------------------------------------------
19

20
# File:        clients/kdump.ycp
21
# Package:        Configuration of kdump
22
# Summary:        Main file
23
# Authors:        Jozef Uhliarik <juhliarik@suse.com>
24
#
25
# $Id: kdump.ycp 27914 2006-02-13 14:32:08Z locilka $
26
#
27
# Main file for kdump configuration. Uses all other files.
28
module Yast
1✔
29
  module KdumpUifunctionsInclude
1✔
30
    def initialize_kdump_uifunctions(_include_target)
1✔
31
      textdomain "kdump"
14✔
32

33
      Yast.import "Popup"
14✔
34
      Yast.import "Kdump"
14✔
35
      Yast.import "Service"
14✔
36
      Yast.import "Package"
14✔
37
      Yast.import "Package"
14✔
38
      Yast.import "Mode"
14✔
39

40
      # EXAMPLE FUNCTIONS
41
      #    void ExampleInit(string key) {
42
      #        y2milestone("Example Init");
43
      #    }
44
      #
45
      #    symbol ExampleHandle(string key, map event) {
46
      #        any ret = event["ID"]:nil;
47
      #        y2milestone("Example Handle");
48
      #        return nil;
49
      #    }
50
      #
51
      #    void ExampleStore(string key, map event) {
52
      #        any ret = event["ID"]:nil;
53
      #        y2milestone("Example Store");
54
      #    }
55
      #
56

57
      @set_network = false
14✔
58

59
      @set_kdump_append = false
14✔
60

61
      # map of values for "KDUMP_SAVEDIR"
62
      #
63
      # local map <string, string >
64
      @KDUMP_SAVE_TARGET = {
65
        "target"    => "file", # ftp, ssh, nfs, cifs
14✔
66
        "server"    => "",
67
        "dir"       => "",
68
        "user_name" => "", # empty means anonymous
69
        "port"      => "", # deafults ftp: 21 ssh:22
70
        "share"     => "",
71
        "password"  => ""
72
      }
73

74
      @type = "local_filesystem"
14✔
75

76
      # definition UI terms for saveing dump target
77
      #
78
      # terms
79

80
      @local_filesystem = VBox(
14✔
81
        Frame(
82
          _("Local Filesystem"),
83
          HBox(
84
            HSpacing(1),
85
            VBox(
86
              Left(
87
                HBox(
88
                  InputField(Id("dir"), _("&Directory for Saving Dumps")),
89
                  VBox(
90
                    Label(""),
91
                    PushButton(Id("select_dir"), _("B&rowse"))
92
                  )
93
                )
94
              )
95
            )
96
          )
97
        )
98
      )
99

100
      @ftp = VBox(
14✔
101
        Frame(
102
          _("FTP"),
103
          HBox(
104
            HSpacing(1),
105
            VBox(
106
              Left(
107
                HBox(
108
                  Left(InputField(Id("server"), _("Server Nam&e"))),
109
                  HSpacing(1),
110
                  Left(IntField(Id("port"), _("P&ort"), 0, 65536, 21)),
111
                  HStretch()
112
                )
113
              ),
114
              # text entry
115
              Left(InputField(Id("dir"), _("&Directory on Server"))),
116
              Left(
117
                CheckBox(
118
                  Id("anonymous"),
119
                  Opt(:notify),
120
                  _("Enable Anon&ymous FTP")
121
                )
122
              ),
123
              Left(
124
                HBox(
125
                  # text entry
126
                  Left(InputField(Id("user_name"), _("&User Name"))),
127
                  HSpacing(1),
128
                  # password entry
129
                  Left(Password(Id("password"), _("&Password")))
130
                )
131
              )
132
            )
133
          )
134
        )
135
      )
136

137
      @ssh = VBox(
14✔
138
        Frame(
139
          _("SSH / SFTP"),
140
          HBox(
141
            HSpacing(1),
142
            VBox(
143
              Left(
144
                HBox(
145
                  Left(InputField(Id("server"), _("Server Nam&e"))),
146
                  HSpacing(1),
147
                  Left(IntField(Id("port"), _("P&ort"), 0, 65536, 22)),
148
                  HStretch()
149
                )
150
              ),
151
              Left(InputField(Id("dir"), _("&Directory on Server"))),
152
              # text entry
153
              Left(
154
                HBox(
155
                  # text entry
156
                  Left(InputField(Id("user_name"), _("&User Name"))),
157
                  HSpacing(1),
158
                  # password entry
159
                  Left(Password(Id("password"), _("&Password")))
160
                )
161
              )
162
            )
163
          )
164
        )
165
      )
166

167
      @nfs = VBox(
14✔
168
        Frame(
169
          _("NFS"),
170
          HBox(
171
            HSpacing(1),
172
            VBox(
173
              Left(InputField(Id("server"), _("Server Nam&e"))),
174
              # text entry
175
              Left(InputField(Id("dir"), _("&Directory on Server")))
176
            )
177
          )
178
        )
179
      )
180

181
      @cifs = VBox(
14✔
182
        Frame(
183
          _("CIFS (SMB)"),
184
          HBox(
185
            HSpacing(1),
186
            VBox(
187
              Left(InputField(Id("server"), _("Server Nam&e"))),
188
              Left(
189
                HBox(
190
                  # text entries
191
                  Left(InputField(Id("share"), _("Exported Sha&re"))),
192
                  HSpacing(1),
193
                  Left(InputField(Id("dir"), _("&Directory on Server")))
194
                )
195
              ),
196
              Left(
197
                CheckBox(
198
                  Id("anonymous"),
199
                  Opt(:notify),
200
                  _("Use Aut&hentication"),
201
                  true
202
                )
203
              ),
204
              Left(
205
                HBox(
206
                  # text entry
207
                  Left(InputField(Id("user_name"), _("&User Name"))),
208
                  HSpacing(1),
209
                  # password entry
210
                  Left(Password(Id("password"), _("&Password")))
211
                )
212
              )
213
            )
214
          )
215
        )
216
      )
217

218
      # helper list, each bit has its decimal representation
219
      @bit_weight_row = [16, 8, 4, 2, 1]
14✔
220
    end
221

222
    # Function initializes option "Enable/Disable kdump"
223
    def InitEnableDisalbeKdump(_key)
1✔
224
      enable = Kdump.add_crashkernel_param
×
225
      enable &&= Service.enabled?(KdumpClass::KDUMP_SERVICE_NAME) unless Mode.installation
×
226

227
      value = enable ? "enable_kdump" : "disable_kdump"
×
228

229
      UI.ChangeWidget(Id("EnableDisalbeKdump"), :Value, value)
×
230

231
      nil
232
    end
233

234
    # Function stores option "Enable/Disable kdump"
235
    #
236
    def StoreEnableDisalbeKdump(_key, _event)
1✔
237
      radiobut = Convert.to_string(
×
238
        UI.QueryWidget(Id("EnableDisalbeKdump"), :Value)
239
      )
NEW
240
      Kdump.add_crashkernel_param = radiobut == "enable_kdump"
×
241

242
      nil
243
    end
244

245
    # Function for handling map values
246
    #
247
    # local map <string, string > KDUMP_SAVE_TARGET
248

249
    def SetUpKDUMP_SAVE_TARGET(target)
1✔
250
      parse_target = target
×
251
      return false if target == ""
×
252

253
      pos = Builtins.search(parse_target, "/")
×
254
      pos1 = -1
×
255
      if pos.zero? # Support for the old '/var/crash' style
×
256
        Ops.set(@KDUMP_SAVE_TARGET, "target", "file")
×
257
      else
258
        Ops.set(
×
259
          @KDUMP_SAVE_TARGET,
260
          "target",
261
          Builtins.substring(parse_target, 0, Ops.subtract(pos, 1))
262
        )
263
        parse_target = Builtins.substring(parse_target, Ops.add(pos, 2))
×
264
      end
265

266
      # file
267
      if Ops.get(@KDUMP_SAVE_TARGET, "target") == "file"
×
268
        Ops.set(@KDUMP_SAVE_TARGET, "dir", parse_target)
×
269

270
        # nfs
271
      elsif Ops.get(@KDUMP_SAVE_TARGET, "target") == "nfs"
×
272
        pos = Builtins.search(parse_target, "/")
×
273
        # pos1 = pos;
274
        Ops.set(
×
275
          @KDUMP_SAVE_TARGET,
276
          "server",
277
          Builtins.substring(parse_target, 0, pos)
278
        )
279
        # pos = find(parse_target, "/");
280
        # KDUMP_SAVE_TARGET["share"]=substring(parse_target,pos1+1,pos-(pos1+1));
281
        Ops.set(
×
282
          @KDUMP_SAVE_TARGET,
283
          "dir",
284
          Builtins.substring(parse_target, pos)
285
        )
286
      elsif ["ftp", "cifs", "ssh", "sftp"].include?(@KDUMP_SAVE_TARGET["target"])
×
287
        pos = Builtins.search(parse_target, "@")
×
288

289
        if !pos.nil?
×
290
          user_pas = Builtins.substring(parse_target, 0, pos)
×
291
          pos1 = Builtins.search(user_pas, ":")
×
292

NEW
293
          if pos1.nil?
×
294
            Ops.set(
×
295
              @KDUMP_SAVE_TARGET,
296
              "user_name",
297
              Builtins.substring(user_pas, 0, pos)
298
            )
299
          else
UNCOV
300
            Ops.set(
×
301
              @KDUMP_SAVE_TARGET,
302
              "user_name",
303
              Builtins.substring(user_pas, 0, pos1)
304
            )
UNCOV
305
            Ops.set(
×
306
              @KDUMP_SAVE_TARGET,
307
              "password",
308
              Builtins.substring(user_pas, Ops.add(pos1, 1), pos)
309
            )
310
          end
311
          parse_target = Builtins.substring(parse_target, Ops.add(pos, 1))
×
312
        end
313
        # only ftp & ssh
314
        if ["ftp", "ssh", "sftp"].include?(@KDUMP_SAVE_TARGET["target"])
×
315
          pos1 = Builtins.search(parse_target, ":")
×
316
          pos = Builtins.search(parse_target, "/")
×
317

NEW
318
          if pos1.nil?
×
NEW
319
            Ops.set(
×
320
              @KDUMP_SAVE_TARGET,
321
              "server",
322
              Builtins.substring(parse_target, 0, pos)
323
            )
324
          else
UNCOV
325
            Ops.set(
×
326
              @KDUMP_SAVE_TARGET,
327
              "server",
328
              Builtins.substring(parse_target, 0, pos1)
329
            )
330
            Ops.set(
×
331
              @KDUMP_SAVE_TARGET,
332
              "port",
333
              Builtins.substring(
334
                parse_target,
335
                Ops.add(pos1, 1),
336
                Ops.subtract(pos, Ops.add(pos1, 1))
337
              )
338
            )
339
          end
340
          # only cifs
341
        else
342
          pos = Builtins.search(parse_target, "/")
×
343
          Ops.set(
×
344
            @KDUMP_SAVE_TARGET,
345
            "server",
346
            Builtins.substring(parse_target, 0, pos)
347
          )
348
          parse_target = Builtins.substring(parse_target, Ops.add(pos, 1))
×
349
          pos = Builtins.search(parse_target, "/")
×
350
          Ops.set(
×
351
            @KDUMP_SAVE_TARGET,
352
            "share",
353
            Builtins.substring(parse_target, 0, pos)
354
          )
355
        end
356

357
        Ops.set(
×
358
          @KDUMP_SAVE_TARGET,
359
          "dir",
360
          Builtins.substring(parse_target, pos)
361
        )
362
      end
363
      debug_KDUMP_SAVE_TARGET = deep_copy(@KDUMP_SAVE_TARGET)
×
364

365
      if Ops.get(debug_KDUMP_SAVE_TARGET, "password", "") != ""
×
366
        Ops.set(debug_KDUMP_SAVE_TARGET, "password", "**********")
×
367
      end
368

369
      Builtins.y2milestone("--------------KDUMP_SAVE_TARGET---------------")
×
370
      Builtins.y2milestone("%1", debug_KDUMP_SAVE_TARGET)
×
371
      Builtins.y2milestone("--------------KDUMP_SAVE_TARGET---------------")
×
372

373
      true
×
374
    end
375

376
    # Function for saving KDUMP_SAVE_TARGET
377
    # to standard outpu for KDUMP_SAVEDIR
378
    #
379
    # e.g. KDUMP_SAVEDIR = "ftp://[user[:pass]]@host[:port]/path
380

381
    def tostringKDUMP_SAVE_TARGET
1✔
382
      result = ""
×
383

384
      # file
385
      if Ops.get(@KDUMP_SAVE_TARGET, "target") == "file"
×
386
        result = "file://"
×
387

388
        if Ops.get(@KDUMP_SAVE_TARGET, "dir") != ""
×
389
          result = Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "dir"))
×
390
        end
391

392
        # ftp
393
      elsif Ops.get(@KDUMP_SAVE_TARGET, "target") == "ftp"
×
394
        result = "ftp://"
×
395

396
        if Ops.get(@KDUMP_SAVE_TARGET, "user_name") == ""
×
397
          result = Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "server"))
×
398
        else
399
          result = Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "user_name"))
×
400

401
          if Ops.get(@KDUMP_SAVE_TARGET, "password") != ""
×
402
            result = Ops.add(
×
403
              Ops.add(result, ":"),
404
              Ops.get(@KDUMP_SAVE_TARGET, "password")
405
            )
406
          end
407
          result = Ops.add(
×
408
            Ops.add(result, "@"),
409
            Ops.get(@KDUMP_SAVE_TARGET, "server")
410
          )
411
        end
412

413
        # add port if it is set...
NEW
414
        result = if Ops.get(@KDUMP_SAVE_TARGET, "port") == ""
×
NEW
415
          Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "dir"))
×
416
        else
NEW
417
          Ops.add(
×
418
            Ops.add(Ops.add(result, ":"), Ops.get(@KDUMP_SAVE_TARGET, "port")),
419
            Ops.get(@KDUMP_SAVE_TARGET, "dir")
420
          )
421
        end
422
        # ssh
423
      elsif ["ssh", "sftp"].include?(@KDUMP_SAVE_TARGET["target"])
×
424
        result = @KDUMP_SAVE_TARGET["target"] + "://"
×
425

426
        if Ops.get(@KDUMP_SAVE_TARGET, "user_name") != "" &&
×
427
            Ops.get(@KDUMP_SAVE_TARGET, "password") == ""
428
          result = Ops.add(
×
429
            Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "user_name")),
430
            "@"
431
          )
432
        elsif Ops.get(@KDUMP_SAVE_TARGET, "user_name") != "" &&
×
433
            Ops.get(@KDUMP_SAVE_TARGET, "password") != ""
434
          result = Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "user_name"))
×
435
          result = Ops.add(
×
436
            Ops.add(
437
              Ops.add(result, ":"),
438
              Ops.get(@KDUMP_SAVE_TARGET, "password")
439
            ),
440
            "@"
441
          )
442
        end
443
        result = Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "server"))
×
444
        # add port if it is set...
NEW
445
        result = if Ops.get(@KDUMP_SAVE_TARGET, "port") == ""
×
NEW
446
          Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "dir"))
×
447
        else
NEW
448
          Ops.add(
×
449
            Ops.add(Ops.add(result, ":"), Ops.get(@KDUMP_SAVE_TARGET, "port")),
450
            Ops.get(@KDUMP_SAVE_TARGET, "dir")
451
          )
452
        end
453

454
        # nfs
455
      elsif Ops.get(@KDUMP_SAVE_TARGET, "target") == "nfs"
×
456
        result = Ops.add(
×
457
          Ops.add("nfs://", Ops.get(@KDUMP_SAVE_TARGET, "server")),
458
          Ops.get(@KDUMP_SAVE_TARGET, "dir")
459
        )
460

461
        # cifs
462
      elsif Ops.get(@KDUMP_SAVE_TARGET, "target") == "cifs"
×
463
        result = "cifs://"
×
464

465
        if Builtins.findfirstof(Ops.get(@KDUMP_SAVE_TARGET, "dir", ""), "/") != 0
×
466
          Ops.set(
×
467
            @KDUMP_SAVE_TARGET,
468
            "dir",
469
            Ops.add("/", Ops.get(@KDUMP_SAVE_TARGET, "dir", ""))
470
          )
471
        end
472

473
        if Ops.get(@KDUMP_SAVE_TARGET, "user_name") == ""
×
474
          result = Ops.add(
×
475
            Ops.add(
476
              Ops.add(
477
                Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "server")),
478
                "/"
479
              ),
480
              Ops.get(@KDUMP_SAVE_TARGET, "share")
481
            ),
482
            Ops.get(@KDUMP_SAVE_TARGET, "dir")
483
          )
484
        else
485
          result = Ops.add(result, Ops.get(@KDUMP_SAVE_TARGET, "user_name"))
×
486

487
          if Ops.get(@KDUMP_SAVE_TARGET, "password") != ""
×
488
            result = Ops.add(
×
489
              Ops.add(result, ":"),
490
              Ops.get(@KDUMP_SAVE_TARGET, "password")
491
            )
492
          end
493

494
          result = Ops.add(
×
495
            Ops.add(
496
              Ops.add(
497
                Ops.add(
498
                  Ops.add(result, "@"),
499
                  Ops.get(@KDUMP_SAVE_TARGET, "server")
500
                ),
501
                "/"
502
              ),
503
              Ops.get(@KDUMP_SAVE_TARGET, "share")
504
            ),
505
            Ops.get(@KDUMP_SAVE_TARGET, "dir")
506
          )
507
        end
508
      end
509

510
      # Popup::Message(result);
511

512
      # y2milestone("-----------------KDUMP_SAVEDIR--------------------");
513
      # y2milestone("%1",result);
514
      # y2milestone("-----------------KDUMP_SAVEDIR--------------------");
515

516
      result
×
517
    end
518

519
    # Function initializes option "Save Traget for Kdump Images"
520
    #
521

522
    def InitTargetKdump(_key)
1✔
523
      SetUpKDUMP_SAVE_TARGET(Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_SAVEDIR"))
×
524

525
      if Ops.get(@KDUMP_SAVE_TARGET, "target") == "file"
×
526
        # UI::ChangeWidget(`id ("local_filesystem"), `Value, true);
527
        UI.ChangeWidget(Id("TargetKdump"), :Value, "local_filesystem")
×
528
        UI.ReplaceWidget(Id("Targets"), @local_filesystem)
×
529
        UI.ChangeWidget(Id("dir"), :Value, Ops.get(@KDUMP_SAVE_TARGET, "dir"))
×
530
      elsif Ops.get(@KDUMP_SAVE_TARGET, "target") == "nfs"
×
531
        UI.ReplaceWidget(Id("Targets"), @nfs)
×
532
        # UI::ChangeWidget(`id ("nfs"), `Value, true);
533
        UI.ChangeWidget(Id("TargetKdump"), :Value, "nfs")
×
534
        UI.ChangeWidget(
×
535
          Id("server"),
536
          :Value,
537
          Ops.get(@KDUMP_SAVE_TARGET, "server")
538
        )
539
        UI.ChangeWidget(Id("dir"), :Value, Ops.get(@KDUMP_SAVE_TARGET, "dir"))
×
540
      elsif ["ssh", "sftp"].include?(@KDUMP_SAVE_TARGET["target"])
×
541
        UI.ReplaceWidget(Id("Targets"), @ssh)
×
542
        UI.ChangeWidget(Id("TargetKdump"), :Value, @KDUMP_SAVE_TARGET["target"])
×
543
        if Ops.get(@KDUMP_SAVE_TARGET, "port") != ""
×
544
          UI.ChangeWidget(
×
545
            Id("port"),
546
            :Value,
547
            Builtins.tointeger(Ops.get(@KDUMP_SAVE_TARGET, "port"))
548
          )
549
        end
550
        Builtins.foreach(["server", "user_name", "dir", "password"]) do |key2|
×
551
          UI.ChangeWidget(Id(key2), :Value, Ops.get(@KDUMP_SAVE_TARGET, key2))
×
552
        end
553
      elsif Ops.get(@KDUMP_SAVE_TARGET, "target") == "ftp"
×
554
        UI.ReplaceWidget(Id("Targets"), @ftp)
×
555
        # UI::ChangeWidget(`id ("ftp"), `Value, true);
556
        UI.ChangeWidget(Id("TargetKdump"), :Value, "ftp")
×
557
        if Ops.get(@KDUMP_SAVE_TARGET, "port") != ""
×
558
          UI.ChangeWidget(
×
559
            Id("port"),
560
            :Value,
561
            Builtins.tointeger(Ops.get(@KDUMP_SAVE_TARGET, "port"))
562
          )
563
        end
564
        Builtins.foreach(["server", "dir"]) do |key2|
×
565
          UI.ChangeWidget(Id(key2), :Value, Ops.get(@KDUMP_SAVE_TARGET, key2))
×
566
        end
567

568
        if Ops.get(@KDUMP_SAVE_TARGET, "user_name") == ""
×
569
          UI.ChangeWidget(Id("user_name"), :Enabled, false)
×
570
          UI.ChangeWidget(Id("password"), :Enabled, false)
×
571
          UI.ChangeWidget(Id("anonymous"), :Value, true)
×
572
        else
573
          UI.ChangeWidget(
×
574
            Id("user_name"),
575
            :Value,
576
            Ops.get(@KDUMP_SAVE_TARGET, "user_name")
577
          )
578
          UI.ChangeWidget(
×
579
            Id("password"),
580
            :Value,
581
            Ops.get(@KDUMP_SAVE_TARGET, "password")
582
          )
583
        end
584
      elsif Ops.get(@KDUMP_SAVE_TARGET, "target") == "cifs"
×
585
        UI.ReplaceWidget(Id("Targets"), @cifs)
×
586
        # UI::ChangeWidget(`id ("cifs"), `Value, true);
587
        UI.ChangeWidget(Id("TargetKdump"), :Value, "cifs")
×
588
        Builtins.foreach(["server", "dir", "share"]) do |key2|
×
589
          UI.ChangeWidget(Id(key2), :Value, Ops.get(@KDUMP_SAVE_TARGET, key2))
×
590
        end
591

592
        if Ops.get(@KDUMP_SAVE_TARGET, "user_name") == ""
×
593
          UI.ChangeWidget(Id("user_name"), :Enabled, false)
×
594
          UI.ChangeWidget(Id("password"), :Enabled, false)
×
595
          UI.ChangeWidget(Id("anonymous"), :Value, false)
×
596
        else
597
          UI.ChangeWidget(
×
598
            Id("user_name"),
599
            :Value,
600
            Ops.get(@KDUMP_SAVE_TARGET, "user_name")
601
          )
602
          UI.ChangeWidget(
×
603
            Id("password"),
604
            :Value,
605
            Ops.get(@KDUMP_SAVE_TARGET, "password")
606
          )
607
        end
608
      end
609

610
      nil
611
    end
612

613
    # Function validates options in
614
    # "Saving Target for Kdump Image"
615

616
    def ValidTargetKdump(_key, _event)
1✔
617
      radiobut = Builtins.tostring(UI.QueryWidget(Id("TargetKdump"), :Value))
×
618
      value = nil
×
619

620
      if radiobut == "local_filesystem"
×
621
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
622

623
        if value.nil? || value == ""
×
624
          Popup.Error(_("You need to specify \"Directory for Saving Dumps\""))
×
625
          UI.SetFocus(Id("dir"))
×
626
          return false
×
627
        end
628
      elsif radiobut == "ftp"
×
629
        value = Builtins.tostring(UI.QueryWidget(Id("server"), :Value))
×
630

631
        if value.nil? || value == ""
×
632
          Popup.Error(_("You need to specify \"Server Name\""))
×
633
          UI.SetFocus(Id("server"))
×
634
          return false
×
635
        end
636
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
637

638
        if value.nil? || value == ""
×
639
          Popup.Error(_("You need to specify \"Directory on Server\""))
×
640
          UI.SetFocus(Id("dir"))
×
641
          return false
×
642
        end
643
        anon = Convert.to_boolean(UI.QueryWidget(Id("anonymous"), :Value))
×
644

645
        if !anon
×
646
          value = Builtins.tostring(UI.QueryWidget(Id("user_name"), :Value))
×
647

648
          if value.nil? || value == ""
×
649
            Popup.Error(_("You need to specify \"User Name\""))
×
650
            UI.SetFocus(Id("user_name"))
×
651
            return false
×
652
          end
653
        end
654
      elsif ["ssh", "sftp", "nfs"].include?(radiobut)
×
655
        value = Builtins.tostring(UI.QueryWidget(Id("server"), :Value))
×
656

657
        if value.nil? || value == ""
×
658
          Popup.Error(_("You need to specify \"Server Name\""))
×
659
          UI.SetFocus(Id("server"))
×
660
          return false
×
661
        end
662
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
663

664
        if value.nil? || value == ""
×
665
          Popup.Error(_("You need to specify \"Directory on Server\""))
×
666
          UI.SetFocus(Id("dir"))
×
667
          return false
×
668
        end
669
      elsif radiobut == "cifs"
×
670
        # fix for bnc #307307 module should check if cifs tools are installed when requested
671
        if Mode.installation || Mode.autoinst
×
672
          Kdump.kdump_packages = Builtins.add(
×
673
            Kdump.kdump_packages,
674
            "cifs-mount"
675
          )
676
          Builtins.y2milestone(
×
677
            "add cifs-mount to selected packages to installation"
678
          )
679
        elsif !Package.Installed("cifs-mount")
×
680
          Builtins.y2milestone(
×
681
            "SMB/CIFS share cannot be mounted, installing missing 'cifs-mount' package..."
682
          )
683
          # install cifs-mount package
684
          Package.CheckAndInstallPackages(["cifs-mount"])
×
685
        end
686

687
        value = Builtins.tostring(UI.QueryWidget(Id("server"), :Value))
×
688

689
        if value.nil? || value == ""
×
690
          Popup.Error(_("You need to specify \"Server Name\""))
×
691
          UI.SetFocus(Id("server"))
×
692
          return false
×
693
        end
694
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
695

696
        if value.nil? || value == ""
×
697
          Popup.Error(_("You need to specify \"Directory on Server\""))
×
698
          UI.SetFocus(Id("dir"))
×
699
          return false
×
700
        end
701
        value = Builtins.tostring(UI.QueryWidget(Id("share"), :Value))
×
702

703
        if value.nil? || value == ""
×
704
          Popup.Error(_("You need to specify \"Exported Share\""))
×
705
          UI.SetFocus(Id("share"))
×
706
          return false
×
707
        end
708
        anon = Convert.to_boolean(UI.QueryWidget(Id("anonymous"), :Value))
×
709

710
        if anon
×
711
          value = Builtins.tostring(UI.QueryWidget(Id("user_name"), :Value))
×
712

713
          if value.nil? || value == ""
×
714
            Popup.Error(_("You need to specify \"User Name\""))
×
715
            UI.SetFocus(Id("user_name"))
×
716
            return false
×
717
          end # end of if ((value == nil) || (value == ""))
718
        end # end of if (anon)
719
      end # end of } else if (radiobut == "cifs")
720

721
      true
×
722
    end
723

724
    # Function handles "Saving Target for Kdump Image"
725
    #
726

727
    def HandleTargetKdump(_key, event)
1✔
728
      event = deep_copy(event)
×
729
      event_name = Ops.get(event, "ID")
×
730
      # StoreTargetKdump ( key, event);
731
      StoreTargetKdumpHandle(@type)
×
732
      radiobut = Builtins.tostring(UI.QueryWidget(Id("TargetKdump"), :Value))
×
733
      @type = radiobut
×
734

735
      if event_name == "anonymous"
×
736
        value = Convert.to_boolean(UI.QueryWidget(Id("anonymous"), :Value))
×
737
        target = Builtins.tostring(UI.QueryWidget(Id("TargetKdump"), :Value))
×
738

NEW
739
        if (value && target == "ftp") || (!value && target == "cifs")
×
740
          UI.ChangeWidget(Id("user_name"), :Enabled, false)
×
741
          UI.ChangeWidget(Id("password"), :Enabled, false)
×
742
          # KDUMP_SAVE_TARGET["user_name"]="";
743
          # KDUMP_SAVE_TARGET["password"]="";
NEW
744
        elsif (value && target == "cifs") || (!value && target == "ftp")
×
745
          UI.ChangeWidget(Id("user_name"), :Enabled, true)
×
746
          UI.ChangeWidget(Id("password"), :Enabled, true)
×
747
        end
748
      elsif radiobut == "local_filesystem"
×
749
        UI.ReplaceWidget(Id("Targets"), @local_filesystem)
×
750
        @set_network = false
×
751
        UI.ChangeWidget(Id("dir"), :Value, Ops.get(@KDUMP_SAVE_TARGET, "dir"))
×
752
        if event_name == "select_dir"
×
753
          dir = UI.AskForExistingDirectory(
×
754
            "/",
755
            _("Select directory for saving dump images")
756
          )
757
          UI.ChangeWidget(Id("dir"), :Value, dir)
×
758
        end
759
      elsif radiobut == "ftp"
×
760
        UI.ReplaceWidget(Id("Targets"), @ftp)
×
761

762
        if Ops.get(@KDUMP_SAVE_TARGET, "port") != ""
×
763
          UI.ChangeWidget(
×
764
            Id("port"),
765
            :Value,
766
            Builtins.tointeger(Ops.get(@KDUMP_SAVE_TARGET, "port"))
767
          )
768
        end
769
        Builtins.foreach(["server", "dir"]) do |key2|
×
770
          UI.ChangeWidget(Id(key2), :Value, Ops.get(@KDUMP_SAVE_TARGET, key2))
×
771
        end
772

773
        if Ops.get(@KDUMP_SAVE_TARGET, "user_name") == ""
×
774
          UI.ChangeWidget(Id("user_name"), :Enabled, false)
×
775
          UI.ChangeWidget(Id("password"), :Enabled, false)
×
776
          UI.ChangeWidget(Id("anonymous"), :Value, true)
×
777
        else
778
          UI.ChangeWidget(
×
779
            Id("user_name"),
780
            :Value,
781
            Ops.get(@KDUMP_SAVE_TARGET, "user_name")
782
          )
783
          UI.ChangeWidget(
×
784
            Id("password"),
785
            :Value,
786
            Ops.get(@KDUMP_SAVE_TARGET, "password")
787
          )
788
        end
789
      elsif ["ssh", "sftp"].include?(radiobut)
×
790
        UI.ReplaceWidget(Id("Targets"), @ssh)
×
791

792
        if Ops.get(@KDUMP_SAVE_TARGET, "port") != ""
×
793
          UI.ChangeWidget(
×
794
            Id("port"),
795
            :Value,
796
            Builtins.tointeger(Ops.get(@KDUMP_SAVE_TARGET, "port"))
797
          )
798
        end
799
        Builtins.foreach(["server", "user_name", "dir", "password"]) do |key2|
×
800
          UI.ChangeWidget(Id(key2), :Value, Ops.get(@KDUMP_SAVE_TARGET, key2))
×
801
        end
802
      elsif radiobut == "nfs"
×
803
        UI.ReplaceWidget(Id("Targets"), @nfs)
×
804
        UI.ChangeWidget(
×
805
          Id("server"),
806
          :Value,
807
          Ops.get(@KDUMP_SAVE_TARGET, "server")
808
        )
809
        UI.ChangeWidget(Id("dir"), :Value, Ops.get(@KDUMP_SAVE_TARGET, "dir"))
×
810
      elsif radiobut == "cifs"
×
811
        UI.ReplaceWidget(Id("Targets"), @cifs)
×
812
        Builtins.foreach(["server", "dir", "share", "user_name", "password"]) do |key2|
×
813
          UI.ChangeWidget(Id(key2), :Value, Ops.get(@KDUMP_SAVE_TARGET, key2))
×
814
        end
815

816
        if Ops.get(@KDUMP_SAVE_TARGET, "user_name") == ""
×
817
          UI.ChangeWidget(Id("user_name"), :Enabled, false)
×
818
          UI.ChangeWidget(Id("password"), :Enabled, false)
×
819
          UI.ChangeWidget(Id("anonymous"), :Value, false)
×
820
        else
821
          UI.ChangeWidget(
×
822
            Id("user_name"),
823
            :Value,
824
            Ops.get(@KDUMP_SAVE_TARGET, "user_name")
825
          )
826
          UI.ChangeWidget(
×
827
            Id("password"),
828
            :Value,
829
            Ops.get(@KDUMP_SAVE_TARGET, "password")
830
          )
831
        end
832
      end
833
      nil
834
    end
835

836
    def StoreTargetKdumpHandle(type)
1✔
837
      radiobut = type
×
838
      value = nil
×
839

840
      if radiobut == "local_filesystem"
×
841
        Ops.set(@KDUMP_SAVE_TARGET, "target", "file")
×
842
        # directory
843
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
844

NEW
845
        if value.nil?
×
846
          Ops.set(@KDUMP_SAVE_TARGET, "dir", "")
×
847
        else
NEW
848
          Ops.set(@KDUMP_SAVE_TARGET, "dir", value)
×
849
        end
850
      elsif radiobut == "ftp"
×
851
        Ops.set(@KDUMP_SAVE_TARGET, "target", "ftp")
×
852

853
        # server
854
        value = Builtins.tostring(UI.QueryWidget(Id("server"), :Value))
×
NEW
855
        if value.nil?
×
856
          Ops.set(@KDUMP_SAVE_TARGET, "server", "")
×
857
        else
NEW
858
          Ops.set(@KDUMP_SAVE_TARGET, "server", value)
×
859
        end
860

861
        # port
NEW
862
        if Builtins.tostring(UI.QueryWidget(Id("port"), :Value)) == "21"
×
NEW
863
          Ops.set(@KDUMP_SAVE_TARGET, "port", "")
×
864
        else
UNCOV
865
          Ops.set(
×
866
            @KDUMP_SAVE_TARGET,
867
            "port",
868
            Builtins.tostring(UI.QueryWidget(Id("port"), :Value))
869
          )
870
        end
871

872
        # directory
873
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
NEW
874
        if value.nil?
×
875
          Ops.set(@KDUMP_SAVE_TARGET, "dir", "")
×
876
        else
NEW
877
          Ops.set(@KDUMP_SAVE_TARGET, "dir", value)
×
878
        end
879

880
        # user_name vs. anonymous
881
        value = Builtins.tostring(UI.QueryWidget(Id("user_name"), :Value))
×
882

883
        if Convert.to_boolean(UI.QueryWidget(Id("anonymous"), :Value))
×
884
          Ops.set(@KDUMP_SAVE_TARGET, "user_name", "")
×
885
        elsif !value.nil?
×
886
          Ops.set(@KDUMP_SAVE_TARGET, "user_name", value)
×
887
        else
888
          Ops.set(@KDUMP_SAVE_TARGET, "user_name", "")
×
889
        end
890

891
        # password
892
        value = Builtins.tostring(UI.QueryWidget(Id("password"), :Value))
×
893

894
        if !value.nil? && Ops.get(@KDUMP_SAVE_TARGET, "user_name") != ""
×
895
          Ops.set(@KDUMP_SAVE_TARGET, "password", value)
×
896
        else
897
          Ops.set(@KDUMP_SAVE_TARGET, "password", "")
×
898
        end
899

900
        # directory
901
        if UI.QueryWidget(Id("dir"), :Value)
×
902
          Ops.set(
×
903
            @KDUMP_SAVE_TARGET,
904
            "dir",
905
            Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
906
          )
907
        else
908
          Ops.set(@KDUMP_SAVE_TARGET, "dir", "")
×
909
        end
910
      elsif ["ssh", "sftp"].include?(radiobut)
×
911
        @KDUMP_SAVE_TARGET["target"] = radiobut
×
912

913
        # server
914
        value = Builtins.tostring(UI.QueryWidget(Id("server"), :Value))
×
915

NEW
916
        if value.nil?
×
917
          Ops.set(@KDUMP_SAVE_TARGET, "server", "")
×
918
        else
NEW
919
          Ops.set(@KDUMP_SAVE_TARGET, "server", value)
×
920
        end
921

922
        # port
NEW
923
        if Builtins.tostring(UI.QueryWidget(Id("port"), :Value)) == "22"
×
NEW
924
          Ops.set(@KDUMP_SAVE_TARGET, "port", "")
×
925
        else
UNCOV
926
          Ops.set(
×
927
            @KDUMP_SAVE_TARGET,
928
            "port",
929
            Builtins.tostring(UI.QueryWidget(Id("port"), :Value))
930
          )
931
        end
932

933
        # directory
934
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
935

NEW
936
        if value.nil?
×
937
          Ops.set(@KDUMP_SAVE_TARGET, "dir", "")
×
938
        else
NEW
939
          Ops.set(@KDUMP_SAVE_TARGET, "dir", value)
×
940
        end
941

942
        # user_name
943
        value = Builtins.tostring(UI.QueryWidget(Id("user_name"), :Value))
×
944

NEW
945
        if value.nil?
×
946
          Ops.set(@KDUMP_SAVE_TARGET, "user_name", "")
×
947
        else
NEW
948
          Ops.set(@KDUMP_SAVE_TARGET, "user_name", value)
×
949
        end
950

951
        # password
952
        value = Builtins.tostring(UI.QueryWidget(Id("password"), :Value))
×
953

954
        if !value.nil? && Ops.get(@KDUMP_SAVE_TARGET, "user_name") != ""
×
955
          Ops.set(@KDUMP_SAVE_TARGET, "password", value)
×
956
        else
957
          Ops.set(@KDUMP_SAVE_TARGET, "password", "")
×
958
        end
959
      elsif radiobut == "nfs"
×
960
        Ops.set(@KDUMP_SAVE_TARGET, "target", "nfs")
×
961

962
        # server
963
        value = Builtins.tostring(UI.QueryWidget(Id("server"), :Value))
×
964

NEW
965
        if value.nil?
×
966
          Ops.set(@KDUMP_SAVE_TARGET, "server", "")
×
967
        else
NEW
968
          Ops.set(@KDUMP_SAVE_TARGET, "server", value)
×
969
        end
970

971
        # directory
972
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
973

NEW
974
        if value.nil?
×
975
          Ops.set(@KDUMP_SAVE_TARGET, "dir", "")
×
976
        else
NEW
977
          Ops.set(@KDUMP_SAVE_TARGET, "dir", value)
×
978
        end
979
      elsif radiobut == "cifs"
×
980
        Ops.set(@KDUMP_SAVE_TARGET, "target", "cifs")
×
981

982
        # server
983
        value = Builtins.tostring(UI.QueryWidget(Id("server"), :Value))
×
984

NEW
985
        if value.nil?
×
986
          Ops.set(@KDUMP_SAVE_TARGET, "server", "")
×
987
        else
NEW
988
          Ops.set(@KDUMP_SAVE_TARGET, "server", value)
×
989
        end
990

991
        # share
992
        value = Builtins.tostring(UI.QueryWidget(Id("share"), :Value))
×
993

NEW
994
        if value.nil?
×
995
          Ops.set(@KDUMP_SAVE_TARGET, "share", "")
×
996
        else
NEW
997
          Ops.set(@KDUMP_SAVE_TARGET, "share", value)
×
998
        end
999

1000
        # directory
1001
        value = Builtins.tostring(UI.QueryWidget(Id("dir"), :Value))
×
1002

NEW
1003
        if value.nil?
×
1004
          Ops.set(@KDUMP_SAVE_TARGET, "dir", "")
×
1005
        else
NEW
1006
          Ops.set(@KDUMP_SAVE_TARGET, "dir", value)
×
1007
        end
1008

1009
        # user_name vs. anonymous
1010
        value = Builtins.tostring(UI.QueryWidget(Id("user_name"), :Value))
×
1011

1012
        if !Convert.to_boolean(UI.QueryWidget(Id("anonymous"), :Value))
×
1013
          Ops.set(@KDUMP_SAVE_TARGET, "user_name", "")
×
1014
        elsif !value.nil?
×
1015
          Ops.set(@KDUMP_SAVE_TARGET, "user_name", value)
×
1016
        else
1017
          Ops.set(@KDUMP_SAVE_TARGET, "user_name", "")
×
1018
        end
1019

1020
        # password
1021
        value = Builtins.tostring(UI.QueryWidget(Id("password"), :Value))
×
1022

1023
        if !value.nil? && Ops.get(@KDUMP_SAVE_TARGET, "user_name") != ""
×
1024
          Ops.set(@KDUMP_SAVE_TARGET, "password", value)
×
1025
        else
1026
          Ops.set(@KDUMP_SAVE_TARGET, "password", "")
×
1027
        end
1028
      end
1029
      Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_SAVEDIR", tostringKDUMP_SAVE_TARGET)
×
1030

1031
      nil
1032
    end
1033

1034
    # Function stores option
1035
    # "Saving Target for kdump Image"
1036

1037
    def StoreTargetKdump(_key, _event)
1✔
1038
      @type = Builtins.tostring(UI.QueryWidget(Id("TargetKdump"), :Value))
×
1039

1040
      nil
1041
    end
1042

1043
    # Function initializes option "Kdump Command Line"
1044
    #
1045

1046
    def InitKdumpCommandLine(_key)
1✔
1047
      value = Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_COMMANDLINE")
×
1048
      UI.ChangeWidget(Id("KdumpCommandLine"), :Value, value.nil? ? "" : value)
×
1049

1050
      nil
1051
    end
1052

1053
    # Function stores option "Kdump Command Line"
1054
    #
1055
    def StoreKdumpCommandLine(_key, _event)
1✔
1056
      Ops.set(
×
1057
        Kdump.KDUMP_SETTINGS,
1058
        "KDUMP_COMMANDLINE",
1059
        Builtins.tostring(UI.QueryWidget(Id("KdumpCommandLine"), :Value))
1060
      )
1061

1062
      nil
1063
    end
1064

1065
    # Function initializes option "Kdump Command Line Append"
1066
    #
1067

1068
    def InitKdumpCommandLineAppend(_key)
1✔
1069
      value = Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_COMMANDLINE_APPEND")
×
1070
      UI.ChangeWidget(
×
1071
        Id("KdumpCommandLineAppend"),
1072
        :Value,
1073
        value.nil? ? "" : value
×
1074
      )
1075

1076
      nil
1077
    end
1078

1079
    # Function stores option "Kdump Command Line Append"
1080
    #
1081
    def StoreKdumpCommandLineAppend(_key, _event)
1✔
1082
      Ops.set(
×
1083
        Kdump.KDUMP_SETTINGS,
1084
        "KDUMP_COMMANDLINE_APPEND",
1085
        Builtins.tostring(UI.QueryWidget(Id("KdumpCommandLineAppend"), :Value))
1086
      )
1087

1088
      nil
1089
    end
1090

1091
    # Function initializes option "Number of Old Dumps"
1092
    def InitNumberDumps(_key)
1✔
1093
      UI.ChangeWidget(
×
1094
        Id("NumberDumps"),
1095
        :Value,
1096
        Builtins.tointeger(
1097
          Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_KEEP_OLD_DUMPS")
1098
        )
1099
      )
1100

1101
      nil
1102
    end
1103

1104
    # Function stores option "Number of Old Dumps"
1105
    def StoreNumberDumps(_key, _event)
1✔
1106
      Ops.set(
×
1107
        Kdump.KDUMP_SETTINGS,
1108
        "KDUMP_KEEP_OLD_DUMPS",
1109
        Builtins.tostring(UI.QueryWidget(Id("NumberDumps"), :Value))
1110
      )
1111

1112
      nil
1113
    end
1114

1115
    # Function initializes option
1116
    # "Enable Immediate Reboot After Saving the Core"
1117

1118
    def InitEnableReboot(_key)
1✔
1119
      UI.ChangeWidget(
×
1120
        Id("EnableReboot"),
1121
        :Value,
1122
        ["yes", "true", "1"].include?(Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_IMMEDIATE_REBOOT"))
1123
      )
1124

1125
      nil
1126
    end
1127

1128
    # Function stores option
1129
    # "Enable Immediate Reboot After Saving the Core"
1130

1131
    def StoreEnableReboot(_key, _event)
1✔
1132
      Ops.set(
×
1133
        Kdump.KDUMP_SETTINGS,
1134
        "KDUMP_IMMEDIATE_REBOOT",
1135
        Convert.to_boolean(UI.QueryWidget(Id("EnableReboot"), :Value)) ? "true" : "false"
×
1136
      )
1137

1138
      nil
1139
    end
1140

1141
    # Function initializes option
1142
    # "Dump Level" - visualization in UI
1143

1144
    def SetDumpLevel(bit_number)
1✔
1145
      counter = -1
×
1146
      Builtins.foreach(
×
1147
        ["free_page", "user_data", "cache_private", "cache_page", "zero_page"]
1148
      ) do |key|
1149
        counter = Ops.add(counter, 1)
×
1150
        one_bit = Builtins.substring(bit_number, counter, 1)
×
NEW
1151
        UI.ChangeWidget(Id(key), :Value, !(one_bit == "1"))
×
1152
      end
1153

1154
      nil
1155
    end
1156

1157
    # Function initializes option
1158
    # "Dump Level"
1159

1160
    def InitDumpLevel(_key)
1✔
1161
      value = Builtins.tointeger(
×
1162
        Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPLEVEL")
1163
      )
1164
      ret = ""
×
1165
      Builtins.foreach(@bit_weight_row) do |try_i|
×
1166
        if Ops.greater_than(Ops.divide(value, try_i), 0)
×
1167
          value = Ops.modulo(value, try_i)
×
1168
          ret = Ops.add(ret, "1")
×
1169
        else
1170
          ret = Ops.add(ret, "0")
×
1171
        end
1172
      end
1173

1174
      # Popup::Message(ret);
1175
      SetDumpLevel(ret)
×
1176

1177
      nil
1178
    end
1179

1180
    # Function store option
1181
    # "Dump Level" - info from UI checkboxes
1182
    # @result string binary code e.g. 11000
1183

1184
    def GetDumpLevel
1✔
1185
      ret = ""
×
1186
      Builtins.foreach(
×
1187
        ["free_page", "user_data", "cache_private", "cache_page", "zero_page"]
1188
      ) do |key|
1189
        ret = if Convert.to_boolean(UI.QueryWidget(Id(key), :Value))
×
1190
          Ops.add(ret, "0")
×
1191
        else
1192
          Ops.add(ret, "1")
×
1193
        end
1194
      end
1195
      # Popup::Message(ret);
1196
      ret
×
1197
    end
1198

1199
    # Function validates options in
1200
    # "Dump Level"
1201
    # install makedumpfile if KDUMP_DUMPLEVEL > 0
1202

1203
    def ValidDumpLevel(_key, _event)
1✔
1204
      result = true
×
1205
      value = GetDumpLevel()
×
1206
      counter = -1
×
1207
      dumplevel = 0
×
1208

1209
      while Ops.less_than(counter, 5)
×
1210
        counter = Ops.add(counter, 1)
×
1211
        one_bit = Builtins.substring(value, counter, 1)
×
NEW
1212
        dumplevel = Ops.add(dumplevel, Ops.get(@bit_weight_row, counter, 0)) if one_bit == "1"
×
1213
      end
1214

1215
      if Ops.greater_than(dumplevel, 0) || dumplevel.nil?
×
1216
        if Mode.installation || Mode.autoinst
×
1217
          Kdump.kdump_packages = Builtins.add(
×
1218
            Kdump.kdump_packages,
1219
            "makedumpfile"
1220
          )
1221
          Builtins.y2milestone(
×
1222
            "add makedumpfile to selected packages to installation"
1223
          )
1224
        elsif Package.Installed("makedumpfile")
×
1225
          return true
×
1226
        else
1227
          package_list = []
×
1228
          package_list = Builtins.add(package_list, "makedumpfile")
×
1229

NEW
1230
          if Package.CheckAndInstallPackages(package_list)
×
NEW
1231
            result = true
×
1232
          else
UNCOV
1233
            result = false
×
1234

NEW
1235
            if Mode.commandline
×
1236
              CommandLine.Error(
×
1237
                Message.CannotContinueWithoutPackagesInstalled
1238
              )
1239
            else
NEW
1240
              Popup.Error(Message.CannotContinueWithoutPackagesInstalled)
×
1241
            end
1242
            Builtins.y2error(
×
1243
              "[kdump] (ValidDumpLevel) Installation of package list %1 failed or aborted",
1244
              package_list
1245
            )
1246
          end
1247
        end
1248
      end # end of if ((dumplevel >0 ) || (dumplevel == nil))
1249
      result
×
1250
    end
1251

1252
    # Function stores option
1253
    # "Dump Level"
1254
    def StoreDumpLevel(_key, _event)
1✔
1255
      value = GetDumpLevel()
×
1256
      counter = -1
×
1257
      int_value = 0
×
1258
      while Ops.less_than(counter, 5)
×
1259
        counter = Ops.add(counter, 1)
×
1260
        one_bit = Builtins.substring(value, counter, 1)
×
NEW
1261
        int_value = Ops.add(int_value, Ops.get(@bit_weight_row, counter, 0)) if one_bit == "1"
×
1262
      end
1263

1264
      ret = Builtins.tostring(int_value)
×
1265
      Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPLEVEL", ret)
×
1266
      # Popup::Message(ret);
1267

1268
      nil
1269
    end
1270

1271
    #  Hadle function for option
1272
    # "Dump Level"
1273

1274
    def HandleDumpLevel(_key, event)
1✔
1275
      ret = Ops.get(event, "ID")
×
1276
      if ret == "cache_private"
×
1277
        value_cache_private = Convert.to_boolean(
×
1278
          UI.QueryWidget(Id("cache_private"), :Value)
1279
        )
1280
        value_cache_page = Convert.to_boolean(
×
1281
          UI.QueryWidget(Id("cache_page"), :Value)
1282
        )
NEW
1283
        UI.ChangeWidget(Id("cache_page"), :Value, true) if value_cache_private && !value_cache_page
×
1284
      end
1285

1286
      if ret == "cache_page"
×
1287
        value_cache_private = Convert.to_boolean(
×
1288
          UI.QueryWidget(Id("cache_private"), :Value)
1289
        )
1290
        value_cache_page = Convert.to_boolean(
×
1291
          UI.QueryWidget(Id("cache_page"), :Value)
1292
        )
1293
        if value_cache_private && !value_cache_page
×
1294
          UI.ChangeWidget(Id("cache_private"), :Value, false)
×
1295
        end
1296
      end
1297
      nil
1298
    end
1299

1300
    # Value of the low memory in UI
1301
    # @return [Integer]
1302
    def allocated_low_memory
1✔
1303
      UI.QueryWidget(Id("allocated_low_memory"), :Value).to_i
×
1304
    end
1305

1306
    # Value of the high memory in UI, 0 if not supported
1307
    # @return [Integer]
1308
    def allocated_high_memory
1✔
1309
      if Kdump.high_memory_supported?
×
1310
        UI.QueryWidget(Id("allocated_high_memory"), :Value).to_i
×
1311
      else
1312
        0
×
1313
      end
1314
    end
1315

1316
    # Total allocated memory, according to UI
1317
    # @return [Integer]
1318
    def allocated_memory
1✔
1319
      allocated_low_memory + allocated_high_memory
×
1320
    end
1321

1322
    # Updates the free memory displayed in the UI
1323
    def update_usable_memory
1✔
1324
      value = if UI.QueryWidget(Id(:auto_resize), :Value)
×
1325
        "---"
×
1326
      else
1327
        Kdump.total_memory - allocated_memory
×
1328
      end
1329

1330
      UI.ReplaceWidget(Id("usable_memory_rp"), usable_memory_widget(value))
×
1331
    end
1332

1333
    # Function initializes option
1334
    # "KdumpMemory"
1335
    def InitKdumpMemory(_key)
1✔
1336
      if Kdump.using_fadump?
×
1337
        UI.ChangeWidget(Id(:auto_resize), :Enabled, false)
×
1338
        auto_resize = false
×
1339
      else
1340
        auto_resize = ["yes", "true", "1"].include?(Kdump.KDUMP_SETTINGS["KDUMP_AUTO_RESIZE"])
×
1341
      end
1342
      UI.ChangeWidget(Id(:auto_resize), :Value, auto_resize)
×
1343
      if Kdump.total_memory > 0
×
1344
        UI.ChangeWidget(Id(:allocated_memory_box), :Enabled, !auto_resize)
×
1345
        UI.ChangeWidget(
×
1346
          Id("total_memory"),
1347
          :Value,
1348
          Builtins.tostring(Kdump.total_memory)
1349
        )
1350
        UI.ChangeWidget(
×
1351
          Id("allocated_low_memory"),
1352
          :Value,
1353
          Builtins.tointeger(Kdump.allocated_memory[:low])
1354
        )
1355
        if Kdump.high_memory_supported?
×
1356
          UI.ChangeWidget(
×
1357
            Id("allocated_high_memory"),
1358
            :Value,
1359
            Builtins.tointeger(Kdump.allocated_memory[:high])
1360
          )
1361
        end
1362
        update_usable_memory
×
1363
      else
1364
        UI.ChangeWidget(Id(:allocated_memory_box), :Enabled, false)
×
1365
        UI.ChangeWidget(Id("total_memory"), :Value, "0")
×
1366
        UI.ChangeWidget(Id("usable_memory"), :Value, "0")
×
1367
      end
1368

1369
      nil
1370
    end
1371

1372
    #  Handle function for option
1373
    # "KdumpMemory"
1374
    def HandleKdumpMemory(_key, event)
1✔
1375
      event = deep_copy(event)
×
1376
      ret = Ops.get(event, "ID")
×
1377
      if ["allocated_low_memory", "allocated_high_memory"].include?(ret)
×
1378
        remaining = Kdump.total_memory - allocated_memory
×
1379
        if remaining <= 0
×
1380
          # Substract (remaining is negative) the excess from the current value
1381
          UI.ChangeWidget(Id(ret), :Value, send(ret.to_sym) + remaining)
×
1382
        end
1383
        update_usable_memory
×
1384
      elsif ret == :auto_resize
×
1385
        value = UI.QueryWidget(Id(ret), :Value)
×
1386
        UI.ChangeWidget(Id(:allocated_memory_box), :Enabled, !value)
×
1387
        update_usable_memory
×
1388
      end
1389

1390
      nil
1391
    end
1392

1393
    # Function validates if crashkernel option includes
1394
    # several ranges and ask user about rewritting
1395
    #
1396
    # "KdumpMemory"
1397
    def ValidKdumpMemory(_key, _event)
1✔
1398
      if Kdump.crashkernel_list_ranges && Mode.normal
×
1399
        Kdump.crashkernel_list_ranges = !Popup.YesNo(
×
1400
          _("Kernel option includes several ranges or redundant values. Rewrite it?")
1401
        )
1402
      end
1403

1404
      true
×
1405
    end
1406

1407
    #  Store function for option
1408
    # "KdumpMemory"
1409
    def StoreKdumpMemory(_key, _event)
1✔
1410
      Kdump.KDUMP_SETTINGS["KDUMP_AUTO_RESIZE"] =
×
1411
        UI.QueryWidget(Id(:auto_resize), :Value) ? "true" : "false"
×
1412
      Kdump.allocated_memory[:low] = Builtins.tostring(
×
1413
        UI.QueryWidget(Id("allocated_low_memory"), :Value)
1414
      )
1415
      if Kdump.high_memory_supported?
×
1416
        Kdump.allocated_memory[:high] = Builtins.tostring(
×
1417
          UI.QueryWidget(Id("allocated_high_memory"), :Value)
1418
        )
1419
      end
1420

1421
      nil
1422
    end
1423

1424
    # Initializes FADump settings in UI
1425
    def InitFADump(_key)
1✔
1426
      if Kdump.fadump_supported? && UI.WidgetExists(Id("FADump"))
×
1427
        UI.ReplaceWidget(
×
1428
          Id("FADump"),
1429
          VBox(
1430
            CheckBox(
1431
              Id("use_fadump"),
1432
              Opt(:notify),
1433
              # T: Checkbox label
1434
              _("Use &Firmware-Assisted Dump"),
1435
              Kdump.using_fadump?
1436
            ),
1437
            VSpacing(1)
1438
          )
1439
        )
1440
      end
1441
    end
1442

1443
    def HandleFADump(_key, event)
1✔
1444
      return if event["ID"] != "use_fadump"
×
1445

1446
      use_fadump_value = UI.QueryWidget(Id("use_fadump"), :Value)
×
1447

1448
      # If cannot adjust the fadump usage
1449
      if !Kdump.use_fadump(use_fadump_value)
×
1450
        UI.ChangeWidget(Id("use_fadump"), :Value, false)
×
1451
        return
×
1452
      end
1453

1454
      UI.ChangeWidget(Id(:auto_resize), :Value, false)
×
1455
      UI.ChangeWidget(Id(:allocated_memory_box), :Enabled, true)
×
1456
      UI.ChangeWidget(Id(:auto_resize), :Enabled, !use_fadump_value)
×
1457

1458
      update_usable_memory
×
1459
      refresh_kdump_memory(use_fadump_value)
×
1460

1461
      nil
1462
    end
1463

1464
    def refresh_kdump_memory(fadump)
1✔
1465
      widget_id = Id("allocated_low_memory")
×
1466
      value = UI.QueryWidget(widget_id, :Value)
×
1467
      UI.ReplaceWidget(Id("allocated_low_memory_rp"),
×
1468
        low_memory_widget(value: value, fadump: fadump))
1469
    end
1470

1471
    # Function initializes option
1472
    # "Custom kdump Kernel"
1473

1474
    def InitInitrdKernel(_key)
1✔
1475
      UI.ChangeWidget(
×
1476
        Id("InitrdKernel"),
1477
        :Value,
1478
        Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_KERNELVER")
1479
      )
1480

1481
      nil
1482
    end
1483

1484
    # Function stores option
1485
    # "Custom kdump Kernel"
1486
    def StoreInitrdKernel(_key, _event)
1✔
1487
      Ops.set(
×
1488
        Kdump.KDUMP_SETTINGS,
1489
        "KDUMP_KERNELVER",
1490
        Builtins.tostring(UI.QueryWidget(Id("InitrdKernel"), :Value))
1491
      )
1492

1493
      nil
1494
    end
1495

1496
    # Function initializes option
1497
    # "Dump Format"
1498

1499
    def InitDumpFormat(_key)
1✔
1500
      case Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPFORMAT")
×
1501
      when "ELF"
1502
        UI.ChangeWidget(Id("DumpFormat"), :Value, "elf_format")
×
1503
      when "compressed"
1504
        UI.ChangeWidget(Id("DumpFormat"), :Value, "compressed_format")
×
1505
      when "lzo"
1506
        UI.ChangeWidget(Id("DumpFormat"), :Value, "lzo_format")
×
1507
      when "snappy"
1508
        UI.ChangeWidget(Id("DumpFormat"), :Value, "snappy_format")
×
1509
      when "zstd"
1510
        UI.ChangeWidget(Id("DumpFormat"), :Value, "zstd_format")
×
1511
      when "raw"
1512
        UI.ChangeWidget(Id("DumpFormat"), :Value, "raw_format")
×
1513
      else
1514
        UI.ChangeWidget(Id("DumpFormat"), :Value, "none_format")
×
1515
      end
1516

1517
      nil
1518
    end
1519

1520
    # Function validates options in
1521
    # "Dump Format"
1522
    # install makedumpfile if KDUMP_DUMPFORMAT == "compressed"
1523

1524
    def ValidDumpFormat(_key, _event)
1✔
1525
      result = true
×
1526
      value = Builtins.tostring(UI.QueryWidget(Id("DumpFormat"), :Value))
×
1527

1528
      if value != "raw_format" || value.nil?
×
1529
        if Mode.installation || Mode.autoinst
×
1530
          Kdump.kdump_packages = Builtins.add(
×
1531
            Kdump.kdump_packages,
1532
            "makedumpfile"
1533
          )
1534
          Builtins.y2milestone(
×
1535
            "add makedumpfile to selected packages to installation"
1536
          )
1537
        elsif Package.Installed("makedumpfile")
×
1538
          return true
×
1539
        else
1540
          package_list = []
×
1541
          package_list = Builtins.add(package_list, "makedumpfile")
×
1542

NEW
1543
          if Package.CheckAndInstallPackages(package_list)
×
NEW
1544
            result = true
×
1545
          else
UNCOV
1546
            result = false
×
1547

NEW
1548
            if Mode.commandline
×
1549
              CommandLine.Error(
×
1550
                Message.CannotContinueWithoutPackagesInstalled
1551
              )
1552
            else
NEW
1553
              Popup.Error(Message.CannotContinueWithoutPackagesInstalled)
×
1554
            end
1555
            Builtins.y2error(
×
1556
              "[kdump] (ValidDumpFormat) Installation of package list %1 failed or aborted",
1557
              package_list
1558
            )
1559
          end
1560
        end
1561
      end # end of if ((value != "elf_format") || (value == nil))
1562
      result
×
1563
    end
1564

1565
    # Function stores option
1566
    # "Dump Format"
1567

1568
    def StoreDumpFormat(_key, _event)
1✔
1569
      value = Builtins.tostring(UI.QueryWidget(Id("DumpFormat"), :Value))
×
1570
      if value == "elf_format"
×
1571
        Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPFORMAT", "ELF")
×
1572
      elsif value == "compressed_format"
×
1573
        Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPFORMAT", "compressed")
×
1574
      elsif value == "lzo_format"
×
1575
        Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPFORMAT", "lzo")
×
1576
      elsif value == "snappy_format"
×
1577
        Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPFORMAT", "snappy")
×
1578
      elsif value == "zstd_format"
×
1579
        Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPFORMAT", "zstd")
×
1580
      elsif value == "raw_format"
×
1581
        Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPFORMAT", "raw")
×
1582
      else
1583
        Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_DUMPFORMAT", "none")
×
1584
      end
1585

1586
      nil
1587
    end
1588

1589
    # Function initializes option
1590
    # "Enable Delete Old Dump Images"
1591

1592
    def InitEnableDeleteImages(_key)
1✔
1593
      UI.ChangeWidget(Id("EnableDeleteImages"), :Notify, true)
×
NEW
1594
      if Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_KEEP_OLD_DUMPS") == "0"
×
1595
        UI.ChangeWidget(Id("EnableDeleteImages"), :Value, false)
×
1596
        UI.ChangeWidget(Id("NumberDumps"), :Enabled, false)
×
1597
      else
NEW
1598
        UI.ChangeWidget(Id("NumberDumps"), :Enabled, true)
×
NEW
1599
        UI.ChangeWidget(Id("EnableDeleteImages"), :Value, true)
×
1600
      end
1601

1602
      nil
1603
    end
1604

1605
    #  Hadle function for option
1606
    # "Enable Delete Old Dump Images"
1607

1608
    def HandleEnableDeleteImages(_key, event)
1✔
1609
      ret = Ops.get(event, "ID")
×
1610
      if ret == "EnableDeleteImages"
×
1611
        value = Convert.to_boolean(
×
1612
          UI.QueryWidget(Id("EnableDeleteImages"), :Value)
1613
        )
NEW
1614
        if value
×
1615
          UI.ChangeWidget(
×
1616
            Id("NumberDumps"),
1617
            :Value,
1618
            Builtins.tointeger(
1619
              Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_KEEP_OLD_DUMPS")
1620
            )
1621
          )
1622
          UI.ChangeWidget(Id("NumberDumps"), :Enabled, true)
×
1623
        else
NEW
1624
          UI.ChangeWidget(Id("NumberDumps"), :Value, Builtins.tointeger("0"))
×
NEW
1625
          UI.ChangeWidget(Id("NumberDumps"), :Enabled, false)
×
1626
        end
1627
      end
1628

1629
      nil
1630
    end
1631

1632
    # Function stores option
1633
    # "Enable Delete Old Dump Images"
1634

1635
    def StoreEnableDeleteImages(_key, _event)
1✔
1636
      value = Convert.to_boolean(
×
1637
        UI.QueryWidget(Id("EnableDeleteImages"), :Value)
1638
      )
1639
      Ops.set(Kdump.KDUMP_SETTINGS, "KDUMP_KEEP_OLD_DUMPS", "0") if !value
×
1640

1641
      nil
1642
    end
1643

1644
    # Function initializes option
1645
    # "SMTP Server"
1646
    def InitSMTPServer(_key)
1✔
1647
      UI.ChangeWidget(
×
1648
        Id("SMTPServer"),
1649
        :Value,
1650
        Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_SMTP_SERVER", "")
1651
      )
1652

1653
      nil
1654
    end
1655

1656
    # Function stores option
1657
    # "SMTP Server"
1658
    def StoreSMTPServer(_key, _event)
1✔
1659
      Ops.set(
×
1660
        Kdump.KDUMP_SETTINGS,
1661
        "KDUMP_SMTP_SERVER",
1662
        Builtins.tostring(UI.QueryWidget(Id("SMTPServer"), :Value))
1663
      )
1664

1665
      nil
1666
    end
1667

1668
    # Function initializes option
1669
    # "User Name" (SMTP Settings)
1670
    def InitSMTPUser(_key)
1✔
1671
      UI.ChangeWidget(
×
1672
        Id("SMTPUser"),
1673
        :Value,
1674
        Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_SMTP_USER", "")
1675
      )
1676

1677
      nil
1678
    end
1679

1680
    # Function stores option
1681
    # "User Name" (SMTP Settings)
1682
    def StoreSMTPUser(_key, _event)
1✔
1683
      Ops.set(
×
1684
        Kdump.KDUMP_SETTINGS,
1685
        "KDUMP_SMTP_USER",
1686
        Builtins.tostring(UI.QueryWidget(Id("SMTPUser"), :Value))
1687
      )
1688

1689
      nil
1690
    end
1691

1692
    # Function initializes option
1693
    # "Password" (SMTP Settings)
1694
    def InitSMTPPassword(_key)
1✔
1695
      UI.ChangeWidget(
×
1696
        Id("SMTPPassword"),
1697
        :Value,
1698
        Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_SMTP_PASSWORD", "")
1699
      )
1700

1701
      nil
1702
    end
1703

1704
    # Function stores option
1705
    # "Password" (SMTP Settings)
1706
    def StoreSMTPPassword(_key, _event)
1✔
1707
      Ops.set(
×
1708
        Kdump.KDUMP_SETTINGS,
1709
        "KDUMP_SMTP_PASSWORD",
1710
        Builtins.tostring(UI.QueryWidget(Id("SMTPPassword"), :Value))
1711
      )
1712

1713
      nil
1714
    end
1715

1716
    # Function initializes option
1717
    # "Notification To"
1718
    def InitNotificationTo(_key)
1✔
1719
      UI.ChangeWidget(
×
1720
        Id("NotificationTo"),
1721
        :Value,
1722
        Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_NOTIFICATION_TO", "")
1723
      )
1724

1725
      nil
1726
    end
1727

1728
    # Function stores option
1729
    # "Notification To"
1730
    def StoreNotificationTo(_key, _event)
1✔
1731
      Ops.set(
×
1732
        Kdump.KDUMP_SETTINGS,
1733
        "KDUMP_NOTIFICATION_TO",
1734
        Builtins.tostring(UI.QueryWidget(Id("NotificationTo"), :Value))
1735
      )
1736

1737
      nil
1738
    end
1739

1740
    # Function initializes option
1741
    # "Notification CC"
1742
    def InitNotificationCC(_key)
1✔
1743
      UI.ChangeWidget(
×
1744
        Id("NotificationCC"),
1745
        :Value,
1746
        Ops.get(Kdump.KDUMP_SETTINGS, "KDUMP_NOTIFICATION_CC", "")
1747
      )
1748

1749
      nil
1750
    end
1751

1752
    # Function stores option
1753
    # "Notification CC"
1754
    def StoreNotificationCC(_key, _event)
1✔
1755
      Ops.set(
×
1756
        Kdump.KDUMP_SETTINGS,
1757
        "KDUMP_NOTIFICATION_CC",
1758
        Builtins.tostring(UI.QueryWidget(Id("NotificationCC"), :Value))
1759
      )
1760

1761
      nil
1762
    end
1763

1764
    # Function validates options in
1765
    # "Dump Format"
1766
    # install makedumpfile if KDUMP_DUMPFORMAT == "compressed"
1767

1768
    def ValidEmail(key, _event)
1✔
1769
      Popup.Message(key)
×
1770
      true
×
1771
    end
1772

1773
    def unsupported_kdump_confirmation
1✔
1774
      text = _(
×
1775
        "Kdump is not supported on this system.\n" \
1776
        "If you continue now, the module may not function properly.\n" \
1777
        "For example, some settings will not be correctly read\n" \
1778
        "and the resulting configuration will probably be useless.\n"
1779
      )
1780
      Popup.ContinueCancelHeadline(_("Kdump not supported"), text)
×
1781
    end
1782
  end
1783
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc